2010-12-02 25 views
1

次のKshスクリプトは、Red Hat Linuxシステムで "No such file or directory"というエラーメッセージを表示します。誰にも解決策がありますか?例えばKSH forループはSolaris/Macでは動作しますが、Red Hat Linuxでは動作しません

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

files.datは、データの3行を有し、各行は、スクリプトが実行されているカレントディレクトリ内のファイルです。

コマンドラインから実行しても同じforループで同じエラーメッセージが生成されます。

Solaris/Macボックスでは動作しますが、Red Hatシステムでは動作しません。

ありがとうございました。

+0

kshまたはfiles.datに対して "No such file or directory"というエラーが生成されていますか? – crnlx

+0

'cat files.dat'はa.c a.h b.cに相当するので、エラーはa.c、a.h、b.cです。 – user527414

答えて

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

元のfiles.datは、エラーの原因となったfindコマンドのリダイレクト出力を使用して作成されました。私は "od -c"コマンドを使ってこのファイルの内容を確認しましたが、奇妙な文字はありません。とにかく、すぐに返事をいただきありがとうございます。 – user527414

0

引数を正しく引用する必要があります。つまり、"$f"ではなく、$fを使用してください。 猫について - これは主にここに記載されています:http://porkmail.org/era/unix/award.html

xargs -a thatfile wcとおそらくよく似ています。

+0

目的は、egrepを使って$ fのいくつかのパターンとマッチさせ、grepの出力をファイルにリダイレクトすることですが、このエラーが発生します。それから、私はwcを実行しようとしましたが、同じエラーが発生しました。私はRH Boxにアクセスできないので、明日 "$ f"を試してみます。ありがとう。 – user527414

関連する問題