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

Так что этот скриншот в основном объясняет это

https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b

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

Одна вещь, которую я заметил, была то, что я помещаю все свои exportи aliasв /etc/bashrc и не ~/.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 Команда для достижения.

Другие вопросы по тегам