【发布时间】:2014-05-01 08:54:35
【问题描述】:
我正在尝试下载文件列表(文本文件,每行一个文件名,文件名中没有空格或换行符),然后检查每个文件是否存在并相应地运行命令。第一部分似乎工作得很好,从 web 服务器下载文件,第一个 echo 输出文件名。但文件存在检查不起作用。
#!/bin/sh
wget -qO- http://web.server/x/files.txt | while read file
do
echo $file
if [ -f $file ]; then
echo $file exists
else
echo $file does not exist
fi
done
在第二个文件(temp.txt)确实存在的目录中执行时的输出:
file1.tmp
does not exist
temp.txt
does not exist
file3.tmp
does not exist
file4.tmp
does not exist
第二个文件确实存在,并且 if 语句中的 echo 命令显然也不识别 $file 变量。
感谢任何帮助,我尝试将其与此处找到的信息拼凑在一起。一个问题可能是这不是一个完整的 linux 系统,而是带有 BusyBox v1.22.1 的嵌入式 Linux (OpenELEC)。
更新:感谢评论者,我们发现代码基本上可以正常工作,因为来自 Web 服务器的 files.txt 仅包含 unix EOL - 它不适用于windows CRLF 行尾。
现在如何让脚本工作而不管来自网络服务器的文件中的行结尾是什么?
【问题讨论】:
-
您是否也在完整的 Linux 系统上对此进行了测试,以验证这是否是问题所在?
-
没试过,因为我需要让它在嵌入式系统上运行。
-
您应该首先尝试以帮助隔离问题。在尝试移植之前,我通常会确保某些东西在完整的 linux 上运行。
-
另外,你的代码对我来说看起来非常好,除了你通常应该做
if [ -f "$file" ]。 -
@merlin2011 在这种情况下不会产生影响,但建议这样做,因为文件名中没有空格或可扩展字符。