Под «переключением на zsh» я предполагаю, что вы имеете в виду одну из двух вещей:
- вы будете использовать
chsh
(или эквивалент), чтобы изменить оболочку входа в систему на zsh, или
- вы настроите Терминал (или его эквивалент) для использования zsh в качестве оболочки по умолчанию.
Большинство программ оболочки («скрипты») содержат строку «shebang» /«hash-bang» . Шебанг объявляет, какой интерпретатор (оболочка) должен интерпретировать (запустить) программу, которая следует за ним.
Как указывают несколько других ответов, программы оболочки, использующие строку shebang, не будут затронуты выбором пользователем оболочки входа в систему, а также интерактивной оболочкой, которая является родителем или N-ным родителем запущенной программы оболочки.
Если вы устанавливаете новую версию zsh и включаете ее в PATH, программы, использующие шебанг, такие как #!/usr/bin/env zsh
будет использовать эту новую версию (когда они запускаются с переменной PATH, которая ставит новую zsh первой). Это может вызвать проблемы только в том случае, если между старой / исходной версией zsh и новой версией было сделано несовместимое изменение. Обратите внимание, что это будет проблема внутри- zsh (inter- zsh- версии), а не проблема между оболочками, о которой я подозреваю, что вы обеспокоены. Обычно это гораздо меньшая категория ошибок, чем если бы (например) вы пытались запустить запущенную программу bash с помощью ksh.
Отказ от использования линии Шебанга по своей сути не переносим между пользовательскими средами. Результат попытки запуска исполняемого недвоичного файла †, в котором отсутствует шебанг, зависит от среды (ОС, оболочка, возможно, оболочка входа в систему и переменные среды). Когда такой файл запускается в моей системе Mac OS X 10.4, поведение меняется в зависимости от оболочки, которая его запускает. ksh и bash оба интерпретируют файл как раздвоенную копию себя. Zsh всегда передает его в /bin/sh
. Если какая - то программа должны были попытаться exec
его непосредственно, оно не будет с ENOEXEC
(это происходит внутри оболочки, они просто «обложка для нее» на «работает» она в альтернативном пути). У меня есть смутная память о некоторых древних системах, которые даже пытались использовать оболочку входа пользователя в этой ситуации, но мой быстрый поиск ничего полезного не дал.
† Недвоичный файл - это файл, который ядро не распознает как один из поддерживаемых форматов двоичных объектов.
Что касается интерактивной совместимости, zsh поддерживает большую часть расширенного синтаксиса от bash и ksh (хотя некоторые из них должны быть включены с помощью параметров оболочки), поэтому большая часть рекомендаций «shell», которые вы найдете в Super User, будет прекрасно работать в Zsh (даже если некоторые из них состоят из "bashisms"). Некоторые вещи (привязки редактирования командной строки, завершение ‡, отображение подсказок и т.д.) Полностью отличаются от bash и ksh и потребуют другого синтаксиса для аналогичных операций.
У zsh есть немного совместимости с bash , но я никогда не пробовал.