Ubuntu: запустіть висновок іншої команди


7

У мене є командний рядок, який видає інший командний рядок, наприклад:

> commandlineA param1 param2
  commandlineB param1

Я хотів би мати єдине виконання командного рядка, яке буде запускати commandlineB із заданими параметрами.

Чи є якийсь простий спосіб зробити це за допомогою одного командного рядка чи мені потрібно запустити невеликий файл bash, який буде зберігати вихід у змінній, а потім запускати його?

Дякую


2
Шукали досить довго, але, мабуть, мені довелося розмістити питання, щоб знайти сам .... $ (commandlineA param1 param2) зробив цю роботу.
Ліор Охана

Відповіді:


10

Здається, ви самі це розробили, але можете використовувати:

$(command parameter1 parameter2)

Редагування редагування: наведене нижче дещо неправильне, тоді як воно виконує команду в нижній частині, виявляється, що змінні середовища все ще будуть доступні. Вибачте за оманливих людей ...

Редагувати: що працюватиме в підзахисті, будь-які неекспортовані змінні середовища не використовуватимуться. Якщо ви хочете запустити команду в одній оболонці, вам потрібно використовувати:

eval $(command parameter1 parameter2)

Ще одна відповідь, що дається, - пропускати через себе баш:

echo 'uname -a' | bash 

Це також буде виконуватися в підзарядці, для запуску в тій же оболонці вам знадобиться:

echo 'uname -a' | bash -c

Між іншим, ви також можете використовувати зворотні кліти замість синтаксису $ (), але це не рекомендується .


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

Ви маєте рацію, я ще раз перевірив і помилився там. Під час запуску у списку вилки bash shell та змінні середовища все ще доступні. Отже, ви праві, вибачте за це.
Кріс Шерлок

3

Використовуй це:

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

У цьому немає нічого поганого, проте він породить ще одну оболонку.
Кріс Шерлок

Так буде$(commandlineA param1 param2)
трійчатка

@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.