Псевдонимы не могут быть запущены/исполнимы из скрипта оболочки? Mac OS X Sierra 13.x

Псевдонимы не могут быть запущены/исполнимы из скрипта оболочки? Mac OS X Sierra 13.x

Итак, этот скриншот в основном объясняет это.

https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b

У меня есть несколько настроенных псевдонимов для открытия новой вкладки в терминале и выполнения других действий, даже псевдоним для запуска скрипта отладочной оболочки, но скрипт debug.shпросто использует псевдоним, newtab, чтобы попытаться открыть новую вкладку, что работает, если просто ввести newtab, но это не работает, как и любые другие псевдонимы, из .sh или любых других исполняемых файлов. Как мне это исправить?

Я заметил одну вещь: я вставляю все свои export' и alias' в /etc/bashrcand not ~/.bash_profileили другие, и я почти не вижу /etc/bashrcупоминаний об этом где-либо.

Я правильно делаю?

решение1

Расширение псевдонима выполняется только из интерактивной оболочки, но не внутри скриптов, поэтому debugрасширяется до newtab, но newtabсамо не расширяется, поскольку вызывается из скрипта.

Если вместо псевдонимов использовать экспортированные функции, то это будет работать:-

debug() { $scripts/debug.sh; }; export -f debug
...
newtab() { $scripts/newtab.osx.sh; }; export -f newtab

Экспорт необходим, поскольку скрипты выполняются в подоболочках, хотя в конкретном случае, который вы приводите, требуется только newtabфункция.

Функции можно использовать вместо псевдонимов везде, но они могут делать гораздо больше, например, добавлять дополнительный параметр в конец строки запуска, очень простое требование, которое псевдонимы не могут делать. Фактически, они могут делать все, что могут скрипты, но в отличие от скриптов они запускаются в текущей оболочке, поэтому они могут изменять среду и текущий каталог, для чего скрипту нужна команда .или sourceдостижение.

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