KSH for循环适用于Solaris / Mac但不适用于Red Hat Linux

时间:2010-12-02 02:01:50

标签: for-loop ksh

以下Ksh脚本在Red Hat Linux系统上给出了“No such file or directory”错误消息。有人有解决方案吗?

#!/usr/bin/ksh
for f in `cat files.dat`
do
  wc $f
done

例如,files.dat有3行数据,每行是运行脚本的当前目录中的文件。

a.c
a.h
b.c

注意,如果从命令行运行,同样的for循环也会生成相同的错误消息。

它适用于Solaris / Mac机箱,但不适用于Red Hat系统。

感谢。

2 个答案:

答案 0 :(得分:1)

你应正确引用你的论点,换句话说,使用"$f",而不是$f。 关于cat - 它主要记录在这里:http://porkmail.org/era/unix/award.html

最适合的是xargs -a thatfile wc

答案 1 :(得分:1)

而不是for ... cat,您应该使用

while read -r f
do
    wc "$f"
done < files.dat

当你需要进行命令替换时,你应该使用$()而不是反引号。

但是您的问题可能是文件a.c等不存在,名称不同,名称中不可见的字符,或files.dat中的行结尾是CR / LF(DOS / Windows风格)而不是\n(仅限LF - Unix风格)或文件中有奇数字符。