EOFに達した後、xargsは終了しません

EOFに達した後、xargsは終了しません

私はこのbashコマンドを使います:

cat urls.txt | xargs -d $"\n" -n 1 -P 250 php script.php $1

ファイルの終わりに達すると、urls.txt何もしません。私のスクリプト(問題がある場合)はWebサイトに接続して探していますが、スクリプトを手動で実行する<a href>php script.php http://urlxargsコマンドを実行すると何百ものWebサイトがあっても正常に動作しますが、urls.txtファイルが十分に大きい場合(数MB)に達すると何もしません。しません。EOF

私の考えでは、スクリプトに問題がないようです。どういうわけかxargsはファイルの終わりを検出できず、入力を待っています。解決策はありますか?

編集する:tail -n1 urls.txtまた、nullデータがあるかどうかEOFを確認してみましたが、すべてがうまくいきました。

答え1

-scriptが機能しない理由がわかりませんxargs。最後に改行文字がないか、他の-dオプションの問題がある可能性があります。小さいリストが実行されるため、一部の行に問題のある文字がある可能性があります。

だから-d $'\n'私は-I{}。コマンドを使用すると、{}すべての行で置き換えられます。

さらに、あなたはウルムチ大学xargs提案-aまたは--arg-fileオプション:

-a ファイル、 --arg-file=ファイル標準入力の代わりにファイルから項目を読み込みます。このオプションを使用すると、コマンドの実行時に stdin は変更されないままになります。それ以外の場合、stdinは/ dev / nullからリダイレクトされます。

努力する:

xargs -a urls.txt -I{} -P 250 php script.php {}

関連情報