2010-12-02 78 views
1

以下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

回答

0

相反的for ... cat,你應該使用

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

而且你應該使用$()而不是反引號的,當你需要做的命令替換。

但是,您的問題可能是a.c等文件不存在,名稱中有不同的名稱,不可見的字符,或者files.dat中的行尾是CR/LF(DOS/Windows風格),而不是\n(僅限LF - Unix風格),否則文件中會有奇怪的字符。

0

您應該正確引用您的論點,換句話說,請使用"$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