Как передать вывод команды в качестве нескольких аргументов другой команде


13

У меня есть команда, которая производит вывод, как это:

$. /
command1 word1 word2 word3

Я хочу передать эти три слова в качестве аргументов другой команде:

$ command2 word1 word2 word3

Как передать выходные данные command1 как три разных аргумента $ 1 $ 2 $ 3 в command2?

Ответы:


9

Вы можете использовать xargs, с -tфлагом xargsбудет многословно и печатает команды, которые он выполняет:

./command1 | xargs -t -n1 command2

-n1определяет максимальное количество аргументов, передаваемых на каждый вызов command2. Это выполнит:

command2 word1
command2 word2
command2 word3

Если вы хотите, чтобы все в качестве аргумента одного вызова command2использования, что:

./command1 | xargs -t command2

Это вызывает command2 с 3 аргументами:

command2 word1 word2 word3

Что если выходные данные команды 1 длиннее ARG_MAX? У меня есть сценарий, когда я передаю содержимое файла в функцию.
0xc0de

4

Вы хотите «подстановку команд», то есть: вставить вывод одной команды в другой

command2 $(command1)

Традиционно это также может быть сделано как:

command2 `command1`

но это использование обычно не рекомендуется, так как вы не можете их вкладывать.

Например:

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

test2.sh

#!/bin/bash
echo $2

ОБЛАСТЬ ПРИМЕНЕНИЯ:

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

Если я это сделаю, он передает выходные данные command1 как один единственный аргумент, а не как три разных: $ command2 $ (cat output_from_command1)
Addy

ну правильно, одна секунда ... кстати, кошка не нужна в той, которую ты положил туда.
Sirex

Работает для меня. Если моя команда2 выдает $ 2 (i, e: второй аргумент), я получаю «word2», как и ожидалось.
Sirex

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.