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

问题描述:

以下Ksh脚本在Red Hat Linux系统上给我提供“无此文件或目录”的错误消息。有没有人有解决方案?KSH for循环适用于Solaris/Mac,但不适用于Red Hat Linux

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

例如,files.dat具有3条线的数据,并且每一行是在所述脚本是从运行的当前目录中的文件。

a.c 
a.h 
b.c 

请注意,如果从命令行运行也会产生相同的错误消息。

它适用于Solaris/Mac盒子,但不适用于Red Hat系统。

谢谢。

+0

错误“No such file or directory”for ksh or for files.dat? – crnlx 2010-12-02 02:09:36

+0

错误是针对a.c,a.h和b.c,因为`cat files.dat`等效于a.c a.h b.c. – user527414 2010-12-02 02:20:58

相反的for ... cat,你应该使用

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

而且你应该使用$()而不是反引号的,当你需要做的命令替换。

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

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

可能更适合的是xargs -a thatfile wc

+0

意图是使用egrep来匹配$ f上的一些模式,并将grep的输出重定向到一个文件,但我得到了这个错误。然后我试图运行wc并得到相同的错误。由于我现在无法访问RH Box,因此我会在明天尝试“$ f”。谢谢。 – user527414 2010-12-02 02:23:34