は、ここに私の問題のあるコードの例です:bashスクリプトエラー(実際に私が間違っているのか分からない)
#!/bin/bash
fileList='fileList.txt'
#IFS=$'\n'
while read filename
do
echo listing "$filename"
ls -ligG "$filename"
done < "$fileList"
echo "done."
#unset IFS
exit 0
出力は次のとおりです。
listing /some/long/path/README.TXT
ls: cannot access /some/long/pa
: No such file or directoryDME.TXT
ていることに注意してくださいls
がパスを切断します。パス/ファイル名の末尾がエラーメッセージに追加されていることにも注意してください(「No such file or directory」の後ろ)。
私はまさにこの長いパスでそれをテストし、それはまだエラーを与える:
/this/is/an/example/of/shorter/name.txt
誰もが何が起こっているのか知っていますか?私はすでに時間このいじりてきた: - 応答で/
はの答えをtorekし、ここでは詳細は次のとおりです。
まず、ここで変更したスクリプトはtorekの提案に基づいています:
#!/bin/bash
fileList=/settings/Scripts/fileList.txt
while IFS=$'\n' read -r filename
do
printf 'listing %q\n' "$filename"
ls -ligG $filename
done < "$fileList"
echo "done."
exit 0
その出力は次のとおりです。
# ./test.sh
listing $'/example/pathname/myfile.txt\r'
: No such file or directorypathname/myfile.txt
done.
気づいていることがまだあります。
ここにファイルがあります。それは存在する。エラーメッセージは、(「パス」に「A」の後には改行)ls: cannot access /some/long/path/README.TXT: No such file or directory
を読むべきではない:改行が手掛かりである
ls -ligG /example/pathname/myfile.txt
106828 -rwxrwx--- 1 34 Mar 28 00:55 /example/pathname/myfile.txt
ファイルのアクセス権を確認してください。このようなものはおそらくあなたのターミナルが誤って長いパスを表示しているだけで、 'ls'はまだ適切な名前を得ている可能性が高いです。 – Cfreak
haha - ファイルのアクセス許可を確認しますか?それはまさに私のスクリプトがやっていないことです。 'ls'が適切な名前を得ていれば、上記のエラーは出ません。しかし、私は単純なスクリプトの外でターミナルでコマンドを実行することができ、正しく実行すると言います。しかし、スクリプトは失敗します。 – MountainX
私は、 '-rwxrwx ---'というアクセス権を持つファイルでエラーを生成しましたが、私はrootとしてスクリプトを実行しています。 – MountainX