bash script error possibly related to length of filename (actually I don't know what's wrong)
本问题已经有最佳答案,请猛点这里访问。
这是我的问题代码的一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash fileList='fileList.txt' #IFS=$' ' while read filename do echo listing"$filename" ls -ligG"$filename" done <"$fileList" echo"done." #unset IFS exit 0 |
输出是:
1 2 3 | listing /some/long/path/README.TXT ls: cannot access /some/long/pa : No such file or directoryDME.TXT |
请注意,
我刚用这个路径测试了它,它仍然给出了错误:
有谁知道发生了什么? 我已经打了好几个小时了: - /
回应torek的回答,这里有更多信息:
首先,这是基于torek建议的修改过的脚本:
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash fileList=/settings/Scripts/fileList.txt while IFS=$' ' read -r filename do printf 'listing %q '"$filename" ls -ligG $filename done <"$fileList" echo"done." exit 0 |
这是输出:
1 2 3 4 5 | # ./test.sh listing $'/example/pathname/myfile.txt ' : No such file or directorypathname/myfile.txt done. |
请注意,仍有一些疯狂的事情发生。
这是文件。 它确实存在。
1 2 | ls -ligG /example/pathname/myfile.txt 106828 -rwxrwx--- 1 34 Mar 28 00:55 /example/pathname/myfile.txt |
基于异常行为,我将说该文件具有CRLF行终止符。您的文件名实际上有一个不可见的回车符附加到名称。在
要修剪这些字符,您可以使用
1 2 | tr -d ' ' < fileList.txt > fileListTrimmed.txt |
并尝试使用该文件。
嵌入式换行是一个线索:错误消息应该是
尝试:
1 2 | printf 'listing %q '"$filename" |
在调用
我不确定注释掉的IFS设置的意图是什么。也许你想阻止
1 2 | while IFS=$' ' read -r filename; do ...; done <"$fileList" |