ファイルの内容を別のシェルコマンドのパラメータとして追加するUNIXシェルコマンドを探しています。例えば:
command << commandArguments.txt
xargsはこのために特別に構築されました:
cat commandArguments.txt | xargs mycommand
ファイルに複数の行がある場合はxargs -L1 -P10
、コマンドの10個のコピーを一度に並行して実行するために使用できます。
xargsはその標準を受け取り、それをシェル コマンドの位置パラメーターとしてフォーマットします。もともとは短いコマンド ライン制限に対処するためのものでしたが、他の目的にも役立ちます。
たとえば、最後の 1 分以内に、10 台のサーバーに並行して接続し、それらのアップタイムをチェックするために使用しました。
echo server{1..10} | tr ' ' '\n' | xargs -n 1 -P 50 -I ^ ssh ^ uptime
このコマンド パイプラインのいくつかの興味深い側面:
tr
、各名前をそれぞれの行に入れるために必要です。これは、xargs
行区切りの入力が必要なためです-n
オプションは、コマンド呼び出しごとに使用される着信行数を制御します。 着信行ごと-n 1
に新しいプロセスを作成します。ssh
-I
トークン ( ) を指定できます。^
-P
同時に実行する子プロセスの数を制御し、興味深い可能性の領域を大幅に広げます..command `cat commandArguments.txt`
バックティックを使用すると、囲まれたコマンドの結果が外部コマンドのリテラルとして使用されます