Использование подстановки команд для выполнения нескольких команд

Использование подстановки команд для выполнения нескольких команд

Я пытаюсь написать в bash скрипт, fooкоторый при запуске $(foo)меняет каталог и запускает скрипт, используя source. Содержимое foo:

echo cd bar
echo "&&"
echo source baz

Когда я запускаю $(foo), он меняет каталог на "bar", но не запускается source baz. Есть ли способ сделать это?

решение1

Вам необходимо на evalвыходе:

eval $(foo)

В противном случае &&(или любой другой подобный элемент языка) рассматривается так, как если бы он был заключен в кавычки: обычный аргумент для cd.

$ echo $(foo)
cd bar && source baz

Пропустив начальный аргумент echo, эта команда выполнится cdс четырьмя аргументами bar && source baz, без уведомления отбросив все аргументы, кроме первого.

решение2

Вы можете использоватьпсевдонимы(смотрите также:человек баш) сделать то, что вы пытаетесь сделать.

alias foo='cd bar && source baz'

изменит каталог на bar и source baz при запуске foo.

Связанный контент