-1

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

https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b

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

Одна вещь, которую я заметил, состояла в том, что я помещаю весь свой export и alias в /etc/bashrc а не в ~/.bash_profile или другие, и я вряд ли где-нибудь /etc/bashrc упомянутый где-либо

я делаю это правильно?

1 ответ1

1

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .