0

どのようなシナリオで aは返さwc -lbgませんか?

そして、特に以下の場合

以下のようなシェル スクリプトのスニペットがあります。

file_name=my_file_name.xyz

1ループで、

wc -l ${file_name}& bg_pid=$!

別のループでは、

wait ${bg_pid}

私は実際に file_names の配列を持っており、wc -lfor each をバックグラウンドに配置し、別のループで s にwait配置しました。pid

wc -lフォアグラウンドで実行すると、これらのファイルが完了します。ただしwc -l入れても戻らないbg


実はやりたい

count[i]=`wc -l ${file_name[i]}` & bg_pid=$!

bg プロセスがそのように値を返すことができないため、これは機能しません (そして、ファイルに書き込みたくありません)。

4

2 に答える 2

2

投稿の上部にある質問に答えるために、wc への入力ストリームがファイルの終わりを提供しない場合、バックグラウンドの「wc -l」は返されないため、これを行うと、たとえば次のようになります。

cat - | wc -l

何も入力しないでください。

于 2013-11-29T12:26:51.710 に答える
1

では、なぜコード wc -lが返されないのか疑問に思っていますよね? 次のコマンドを検討してください。

wc -l ${file_name}

が空の文字列に評価される場合${file_name}、次を実行しています。

wc -l

最後stdinまで続きstdinます。何も閉じていない場合は、待機し、待機しwcます....そして待機します.....stdinwc

于 2013-11-29T12:32:50.500 に答える