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系统。
谢谢。
相反的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
。
意图是使用egrep来匹配$ f上的一些模式,并将grep的输出重定向到一个文件,但我得到了这个错误。然后我试图运行wc并得到相同的错误。由于我现在无法访问RH Box,因此我会在明天尝试“$ f”。谢谢。 – user527414 2010-12-02 02:23:34
错误“No such file or directory”for ksh or for files.dat? – crnlx 2010-12-02 02:09:36
错误是针对a.c,a.h和b.c,因为`cat files.dat`等效于a.c a.h b.c. – user527414 2010-12-02 02:20:58