コマンド出力をいくつかの引数として別のコマンドに渡す方法


12

次のような出力を生成するコマンドがあります。

$。/ command1
word1 word2 word3

この3つの単語を、次のような別のコマンドの引数として渡します。

$コマンド2ワード1ワード2ワード3

command1の出力を3つの異なる引数$ 1 $ 2 $ 3としてcommand2に渡す方法は?

回答:


8

を使用するxargsと、-tフラグxargsが冗長になり、実行するコマンドが出力されます。

./command1 | xargs -t -n1 command2

-n1のすべての呼び出しに渡される最大の引数を定義しますcommand2。これが実行されます:

command2 word1
command2 word2
command2 word3

すべてを1回の呼び出しの引数としてcommand2使用する場合:

./command1 | xargs -t command2

それは3つの引数でcommand2を呼び出します:

command2 word1 word2 word3

command1の出力がより長い場合はARG_MAXどうなりますか?ファイルの内容を関数に渡すシナリオがあります。
0xc0de

4

「コマンド置換」、つまり、1つのコマンドの出力を外部に埋め込む必要がある

command2 $(command1)

従来、これは次のように行うこともできます。

command2 `command1`

ただし、ネストすることはできないため、通常、この使用はお勧めしません。

例えば:

test.sh:
#!/bin/bash
echo a b c

test2.sh

#!/bin/bash
echo $2

使用する:

./test2.sh $(./test.sh)
b

私がそうする場合、それはcommand1の出力を1つの引数として渡します。3つの異なる引数とは異なります。$ command2 $(cat output_from_command1)
Addy

ああ、1秒...猫を置く必要はありません。
Sirex 2014年

私のために働く。私のcommand2が$ 2(つまり、2番目の引数)をエコーする場合、期待どおりに「word2」を取得します。
Sirex 2014年

0

これはあなたを助けると思います

コマンド1 | xargsコマンド2

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.