Я пытаюсь написать в 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.