逐行不工作

逐行不工作

脚本

FILE="/u0146121/bin/list.txt"
while read line; do 
echo $line 
done < $FILE

我是 Bash 脚本的新手,正在尝试弄清楚这个 while 循环。我想逐行读取文本文件,然后执行命令。

我不断收到错误:

 No such file or directory121/bin/list.txt

有人知道如何解决这个问题吗?

答案1

我怀疑您的脚本可能有 DOS 样式的行尾。在 DOS(和 Windows)中,文本文件的每一行都以回车符(以 或 表示\r)结尾^M,后跟换行符(\n^J)。另一方面,Unix 文本文件的每一行都以换行符结尾。如果您给 unix 工具(如 bash)一个 DOS 格式的文件,它会将回车符解释为行的一部分,并且会感到非常困惑。在这种情况下,在我看来,FILE 实际上被设置为/u0146121/bin/list.txt^M,但它并不存在,当 shell 报告问题时,回车符会使终端感到困惑,错误消息的结尾会打印在开头的顶部。

要进行检查,请尝试使用 -- 打印脚本,cat -v /path/to/script如果在行尾看到 ^M,则说明文件为 DOS 格式。您的系统可能有一个命令来翻译它,但命令名称会有所不同(例如,可能是dos2unixfromdos或...)。如果找不到相关命令,可以使用这个简单的 perl 脚本:

perl -pi -e 's/\r//g' /path/to/script

答案2

您可能没有向我们展示您正在做什么。错误消息是

No such file or directory121/bin/list.txt

这表明$FILE包含121/bin/list.txt而不是/u0146121/bin/list.txt所以我只能猜测你实际上并没有运行FILE="/u0146121/bin/list.txt"但是FILE="121/bin/list.txt"

无论如何,尝试在不定义变量的情况下运行它以查看它是否有效:

while read line; do 
  echo $line;
done < /u0146121/bin/list.txt

答案3

尝试

FILE="/u0146121/bin/list.txt"
while read line; do 
echo $line 
done < cat $FILE

相关内容