
Итак, этот скриншот в основном объясняет это.
https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b
У меня есть несколько настроенных псевдонимов для открытия новой вкладки в терминале и выполнения других действий, даже псевдоним для запуска скрипта отладочной оболочки, но скрипт debug.sh
просто использует псевдоним, newtab
, чтобы попытаться открыть новую вкладку, что работает, если просто ввести newtab
, но это не работает, как и любые другие псевдонимы, из .sh или любых других исполняемых файлов. Как мне это исправить?
Я заметил одну вещь: я вставляю все свои export
' и alias
' в /etc/bashrc
and 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
достижение.