Ubuntu: запустить вывод другой команды


13

У меня есть командная строка, которая выводит другую командную строку, например:

> commandlineA param1 param2
  commandlineB param1

Я хотел бы иметь одно выполнение командной строки, которое будет запускать commandlineB с заданным параметром (ами).

Есть ли простой способ сделать это с помощью одной командной строки или мне нужно запустить небольшой файл bash, который будет хранить выходные данные в переменной, а затем запустить его?

Спасибо


2
Искал довольно долго, но, думаю, мне пришлось опубликовать вопрос, чтобы найти его сам ... $ (commandlineA param1 param2) сделал свою работу.
Лиор Оана

Ответы:


17

Похоже, вы сами с этим разобрались, но вы можете использовать:

$(command parameter1 parameter2)

Правка правки: приведенное ниже несколько неверно, хотя команда и запускает команду в подоболочке, оказывается, что переменные среды все еще будут доступны. Извините за вводящих в заблуждение людей ...

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

eval $(command parameter1 parameter2)

Другой ответ дан, чтобы пропустить через bash сам:

echo 'uname -a' | bash 

Это также будет выполнено в подоболочке, для запуска в той же оболочке, что вам потребуется:

echo 'uname -a' | bash -c

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


(1) Я не знаю точно, что вы подразумеваете под «это будет работать в недрах». Неэкспортируемые переменные окружения будут использоваться. (2) Я не вижу смысла использовать evalздесь. Если у вас есть причина, пожалуйста, объясните. (3) Ваш последний пример (с  -c) совершенно неверен.
Скотт

Вы правы, я проверил еще раз, и я был не прав там. При работе в виде списка вилки оболочки bash и переменные среды по-прежнему доступны. Так что вы правы, извините за это.
Крис Шерлок

4

Использовать этот:

commandlineA param1 param2 | bash

Пример:

echo "uname -a" | bash

Вывод:

Linux k1104 2.6.38-8-generic # 42-Ubuntu SMP Пн 11 апреля 03:31:50 UTC 2011 i686 i686 i386 GNU / Linux

В этом нет ничего плохого, однако это вызовет еще одну оболочку bash.
Крис Шерлок

Так будет$(commandlineA param1 param2)
tripleee

@tripleee: Вы сравниваете апельсины и тыквы.  printf '\143\144\040\057\n' | bashв конечном счете, это запрет, поскольку команда выполняется в новом отдельном (и временном) процессе оболочки. Напротив, $(printf '\143\144\040\057\n')текущая, активная, интерактивная оболочка изменит каталог.
Скотт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.