Cara menyampaikan keluaran perintah sebagai beberapa argumen ke perintah lain

12

Saya punya perintah yang menghasilkan output seperti ini:

$. / command1
word1 word2 word3

Saya ingin menyampaikan tiga kata ini sebagai argumen untuk perintah lain seperti ini:

$ command2 word1 word2 word3

Bagaimana cara melewatkan output command1 sebagai tiga argumen berbeda $ 1 $ 2 $ 3 ke command2?

Addy
sumber

Jawaban:

8

Anda dapat menggunakan xargs, dengan -tflag xargsakan verbose dan mencetak perintah yang dijalankannya:

./command1 | xargs -t -n1 command2

-n1mendefinisikan argumen maksimum yang diteruskan ke setiap panggilan command2. Ini akan mengeksekusi:

command2 word1
command2 word2
command2 word3

Jika Anda ingin semua sebagai argumen dari satu panggilan command2penggunaan itu:

./command1 | xargs -t command2

Itu memanggil command2 dengan 3 argumen:

command2 word1 word2 word3
kekacauan
sumber
Bagaimana jika output dari command1 lebih panjang dari ARG_MAX? Saya memiliki skenario di mana saya meneruskan konten file ke suatu fungsi.
0xc0de
4

Anda ingin 'perintah substitusi', yaitu: embed output dari satu perintah di luar negeri

command2 $(command1)

Secara tradisional ini juga dapat dilakukan sebagai:

command2 `command1`

tetapi penggunaan ini biasanya tidak disarankan, karena Anda tidak dapat membuat sarang.

Sebagai contoh:

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

test2.sh

#!/bin/bash
echo $2

MENGGUNAKAN:

./test2.sh $(./test.sh)
b
Sirex
sumber
Jika saya melakukan itu, itu mengeluarkan output command1 sebagai satu argumen tunggal, tidak seperti tiga berbeda: $ command2 $ (cat output_from_command1)
Addy
ah benar, satu detik ... btw kucing tidak diperlukan dalam yang Anda letakkan di sana.
Sirex
Bekerja untukku. Jika command2 saya menggemakan $ 2 (i, e: argumen kedua) saya mendapatkan "word2" seperti yang diharapkan.
Sirex
0

Saya kira ini membantu Anda

command1 | perintah xargs2

PoLIVoX
sumber