ご挨拶
ファイルの内容を配列に解析する必要がある簡単な bash スクリプトを書いています。ファイル内のエントリは「改行」で区切られているため、ファイルは次のようになります。
path/to/file
path/to/other/file
内容を解析して反復処理したいと思います。現在のコードは次のようになります。
CONTENT=`cat /path/to/text/file.txt`
for PATH in $CONTENT
do
echo $PATH
chmod -R 440 $PATH
fi
このコードは、UNIX の行末文字を含むファイルではうまく機能します。ただし、Windows 形式のテキスト ファイルでは、ひどく失敗します。「echo $PATH」ステートメントは正しいパスを生成しますが、chmod はファイルが存在しないと表示して失敗します。私のやり方は、Windows の行末文字がトリムされないため、改行文字を含むファイル パスを chmod しようとしていることです。
対象ファイルが Unix または Windows の改行で作成されたかどうかに関係なく、これを機能させる必要がありますが、シェル スクリプトについては初心者なので、どのように実行すればよいかよくわかりません。
私はあなたの助けに感謝します!
答え1
各行を処理するときに、キャリッジ リターンを削除するだけでよいようです。本当に簡単な方法は ユーティリティを使用することですdos2unix
が、システムにそれがなかったり入手できない場合は、 で同様のことを実現できますtr
。例:
echo $PATH | tr -d '\r'
を使用するなどのその他のアイデアsed
については、ウィキペディアエントリ。
編集:$PATH
は、間違いなく環境によって設定され、他のプログラムがその値に依存する可能性があるため、適切な変数名ではない ことを指摘しておきます$CUR_PATH
。 のように変更することを検討してください。
答え2
スクリプトの最初の行を変更するだけです。
CONTENT=$(tr -d \\r < /path/to/text/file.txt)