Оболочка 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 !