1

OSX を使用して Mac で作業しており、シェルとして bash を使用しています。次のような効果をもたらすスクリプトがあります。

VAR1="pass me into parallel please!"
VAR2="oh me too, and there's actually a lot of us, but its best we stay here too"
printf "%s\n" {0..249} | xargs -0 -P 8 -n 1 . ./parallel.sh

エラーが表示されます: xargs: .: Permission denied。目的は、別のスクリプト (parallel.sh と呼ばれる) を並行して実行することです。このスクリプトには、0 ~ 249 の数値が与えられます。さらに、パラレルが VAR1 と VAR2 を認識できるようにしたいと考えています。しかし、スクリプトを と並行してソースしようとすると. ./parallel、xargs はそれを好みません。ソーシングのポイントは、スクリプトに、並行してアクセスしたい他の変数があるためです。

xargs は入力をスペースで区切るため、print0 の使用について読んだことがありますが、-print0 の機能と使用方法が本当にわかりませんでした。皆さんが提供できる助けをありがとう。

4

4 に答える 4

1

権限の問題があると思います。そのファイル「parallel.sh」の実行権限を取得してみてください

コマンドは私にとってはうまくいきます:

Kaizen ~/so_test $ printf "%s\n" {0..4} | xargs -0 -P 8 -n 1 echo
0
1
2
3
4

男は見つける:

-print0

真実; 標準出力に完全なファイル名を出力し、その後にヌル文字を出力します (-print が使用する改行文字の代わりに)。これにより、改行やその他の種類の空白を含むファイル名が、検索出力を処理するプログラムによって正しく解釈されるようになります。このオプションは、xargs の -0 オプションに対応します。

print0の使用について:リンクを確認してください:スタックオーバーフローに質問があります

find の出力をキャプチャします。-print0 を bash 配列に

于 2013-06-06T02:49:29.810 に答える
1

引数を渡す問題は、xarg の空白の解釈に関連しています。xargs のマニュアルページから:

-0      Change xargs to expect NUL (``\0'') characters as separators, instead of spaces and newlines.

環境変数の問題はexport、変数をサブプロセスで使用できるようにするために使用することで解決できます。

say.sh

echo "$1 $V"

結果

bash$ export V=whatevs
bash$ printf "%s\n" {0..3} | xargs -P 8 -n 1 ./say.sh
1 whatevs
2 whatevs
0 whatevs
3 whatevs
于 2013-06-06T02:28:42.847 に答える
1

スペースの問題を回避するために、 -d オプションを使用して xargs の区切り文字として改行文字を使用します。

xargs -d '\n' ...
于 2016-08-03T11:48:28.750 に答える