Просто используйте без кавычек подстановка команд:
$ ./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 word1b
word2
и к command2
, но получение этого права является достаточно сложным для получения более подробной информации о том, что может выводить command1
, чтобы обеспечить правильное решение.
command1 производит выходные данные как обычный текст: имя хоста: имя пользователя порта. command2 предположим, что снова прочитайте три аргумента, например hostname: port username password – Addy
В этом случае я бы рекомендовал версию с помощью 'read'. Я предполагаю, что ни хост, ни порт, ни имя пользователя не могут содержать пробелы, но я бы с сомнением сделал какие-либо предположения о пароле. (Это не сработает, если пароль начинается или заканчивается пробелом, но я не видел способа обнаружить это из описанного вывода 'command1' в любом случае). – chepner