2014-11-04 2 views
-1

У меня есть команда, которая производит такой вывод:Как передать выходные данные команды, как несколько аргументов другой команды

$ ./command1 
word1 word2 word3 

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

$ command2 word1 word2 word3 

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

ответ

0

кажется, что лучший способ, чтобы отделить вывод command1 и отправить его Command2 в трех различных аргументов является использование xargs с опцией -t, который проходит все в качестве аргумента, как это:

$ ./command1 | xargs -t command2 

Источник
https://serverfault.com/users/249134/chaosc

1

Просто используйте без кавычек подстановка команд:

$ ./command2 $(./command1) 

Однако, это также подвергает выход command1 к PathName поколения, так что, если выход может включать в себя что-то вроде *.txt, вы рискуете, что расширяется в несколько слов, прежде чем передается в command2. В этом случае, вы должны будете использовать

$ read arg1 arg2 arg3 <<< "$(./command1)" 
$ ./command2 "$arg1" "$arg2" "$arg3" 

или

$ read -a args <<< "$(./command1)" 
$ ./command2 "${args[@]}" 

разделить вывод на 3 слова, не подвергая их PathName поколение.


Это не будет работать, если выход command1 выглядит

"word1a word1b" word2 

и вы ожидаете, чтобы иметь возможность пройти два аргумента, word1a word1bword2 и к command2, но получение этого права является достаточно сложным для получения более подробной информации о том, что может выводить command1, чтобы обеспечить правильное решение.

+0

command1 производит выходные данные как обычный текст: имя хоста: имя пользователя порта. command2 предположим, что снова прочитайте три аргумента, например hostname: port username password – Addy

+0

В этом случае я бы рекомендовал версию с помощью 'read'. Я предполагаю, что ни хост, ни порт, ни имя пользователя не могут содержать пробелы, но я бы с сомнением сделал какие-либо предположения о пароле. (Это не сработает, если пароль начинается или заканчивается пробелом, но я не видел способа обнаружить это из описанного вывода 'command1' в любом случае). – chepner

Смежные вопросы