2

У меня ZSH в качестве оболочки по умолчанию в MacOS, все работает нормально. ZSH устанавливается как пакет brew, я установил оболочку по умолчанию в своей учетной записи, новая оболочка указана в /etc/shells ... все установлено, как я уже говорил.

У меня есть несколько сценариев оболочки, в которых я использую некоторые команды из zsh, например print . Когда я выполняю сценарий из командной строки, команда print не распознается и сценарий не выполняется.

Этот скрипт не имеет строки Шебанга. Когда я ставлю строку Шебанга для Zsh, то все работает; команда print работает.

Поскольку я использую только ZSH, возможно ли установить оболочку по умолчанию для запуска сценариев, поэтому мне не нужно помещать строку shebang в мои сценарии .zsh?

Или можно связать расширение .zsh с выполнением оболочки ZSH ?

1 ответ1

4

Оболочка Z использует /bin/sh если вы запускаете исполняемый скрипт без строки shebang (см. man zshmisc , раздел COMMAND EXECUTION или посмотрите этот ответ для получения полного списка). Это кажется жестко закодированным. Итак, если вы не хотите использовать unix-way (добавьте строку shebang), вы можете использовать так называемый суффикс псевдонима в оболочке Z, чтобы выполнить все файлы с определенным расширением в определенной программе. В твоем случае

alias -s zsh=zsh

должен сделать свое дело. Общая форма (как приведенный выше пример не так понятен):

alias -s extension=program

Страница man объясняет, как это работает:

Если присутствует флаг -s, определите псевдоним суффикса: если командное слово в командной строке имеет вид text.name , где text - любая непустая строка, она заменяется текстовым value text.name . Обратите внимание, что имя обрабатывается как буквенная строка, а не как шаблон.

Конечный пробел в значении не является особенным в этом случае. Например,

alias -s ps=gv

приведет к расширению команды *.ps до gv *.ps . Поскольку расширение псевдонима выполняется раньше, чем глобализация, *.ps затем будет расширен. Суффиксные псевдонимы составляют пространство имен, отличное от других псевдонимов (поэтому в приведенном выше примере все еще возможно создать псевдоним для команды ps), и эти два набора никогда не перечисляются вместе.


Если вы хотите использовать скрипты, которые находятся где-то в вашем $PATH , используйте

alias -s zsh="zsh -o PATH_SCRIPT"

Это включает опцию PATH_SCRIPT:

Если установлена опция PATH_SCRIPT, а имя файла не содержит путь к каталогу (т. Е. В имени нет `/'), сначала выполняется поиск в текущем каталоге, а затем путь к команде, заданный переменной PATH.

Обратите внимание, что в текущем каталоге выполняется поиск сценария, даже если . не в вашем PATH !

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