Zsh. Вопросы совместимости
Легко видеть, что все изобилие возможностей zsh
далеко выходит за рамки стандарта POSIX для командных оболочек. Однако, в подтверждение своего соответствия оному, zsh
, наступая на горло собственной песне, способен к эмуляции POSIX Shell.
Для достижения полной совместимости с POSIX Shell достаточно создать файл /bin/sh
как символическую ссылку на исполнимый файл zsh
, например:
$ ln -s /bin/zsh /bin/sh
После этого при вызове оболочки /bin/sh
(интерактивно ли, или в сценарии) на самом деле вызывается zsh
-- однако ведёт он себя в точности как POSIX shell, то есть утрачивает все свои "продвинутые" возможности.
Возможно и использование zsh
в качестве общесистемного шелла -- то есть в той роли, которую почти во всех дистрибутивах Linux'а исполняет bash
. Впрочем, делать это следует только в случае полной уверенности, что все общесистемные скрипты полностью совместимы с zsh
и несут в себе sha-bang
#! /bin/zsh
А такая уверенность может быть только в том случае, если они написаны собственноручно. И. разумеется, при установке zsh
надо озаботиться, чтобы его исполняемый файл находился именно в каталоге /bin
, а не в /usr/bin
или /usr/local/bin
, которые могут представлять собой самостоятельные файловые системы.
Некогда я успешно применял zsh
в качестве общесистемного шелла в самостройном Linux'е, собранном по мотивам Linux from Scratch Герарда Бикманса. Однако я не уверен, что в других дистрибутивах Linux'а это будет работать корректно -- уж слишком все они завязаны именно на bash-скриптинг и, соответственно, на bash'измы.
Кроме того, в zsh
имеется и некий режим совместимости с командными оболочками клана C-shell. В первую очередь это касается конфигурационных файлов, которым можно придать вид, привычный пользователям csh
или tcsh
, о чём подробно говорилось здесь. Однако в zsh
допускается и использование синтаксических конструкций, подобных интерпретируемым языком C-shell. Правда, с этим вопросом я детально не разбирался за неактуальностью.