Алексей Федорчук
Сознательные граждане, активно применяющие CLI, используют множество команд, как встроенных в их любимый шелл, так и внешних. Но, думаю, что самыми употребимыми в повседневной жизни являются такие:
pwd
для определения своего текущего положения на файловом древе — да-да, иногда, после многократных переходов между подкаталогами, забываешь, не только кто я, но и где я (уж не в Тимирязском ли?);ls
— для просмотра содержимого текущего каталога;cd
— для перехода в определённый каталог.
Однако здесь Zsh вносит свои коррективы, здорово облегчающие жизнь его применителя. Так, в очерке-приглашении было показано, как фактическим можно избавиться от команды pwd
, выведя путь к текущему каталогу в качестве RPROMPT
. Об особенностях применения в Zsh команды ls
я рассчитываю рассказать в ближайшем будущем. А вот о команде cd
самое время поговорить сейчас. Точнее, о том, что на самом деле в Zsh эта команда… не нужна.
Да, дорогие мои болельщики, в среде Zsh без этой команды не просто можно обойтись, а жить куда комфортней, нежели с ней. Ведь давайте вспомним, что такое переход в каталог имя_рек
? Для типа файлов, именуемого каталогом (directory) это то же самое, что исполнение для обычного (ordinary) файла, будь он откомпилированным бинарником или интерпретируемым сценарием.
И потому более чем логично то, что как для запуска скрипта оболочки не требуется никакой внешней команды (хотя и не возбраняется что-нибудь типа .
или /bin/sh
), так и для перехода в каталог, к которому данный юзер имеет доступ (то есть попадает в число тех, для кого у этого каталога установлен би исполнения), ему достаточно указать полный путь к нему, без всяких команд. Например, введя к командной строке что-нибудь вроде
$ /usr/share/fonts/truetype/
можно сразу оказаться в каталоге с TTF-шрифтами.
«Безкомандный» переход в каталоги распространяется и на «символические» обозначения последних. Так, команда
$ ~
переместит пользователя в его домашний каталог. Как, кстати, и команда
$ $HOME
Хотя практического смысла последний вариант не имеет. Зато директива
$ ..
волшебным образом ознаменует переход в каталог, родительский относительно текущего.
Правда, всё это происходит не само собой: для практического воплощения этого волшебства в общесистменом конфиге /etc/zsh/zshrc
или пользовательском ~/.zshrc
должна присутствовать строка
setopt autocd
В пару к ней можно добавить ещё и такую строку:
cdpath=(~/ /home/current/ /home/data/)
где в скобках перечислены каталоги, к подкаталогам которых чаще всего требуется быстрый доступ. И теперь, где бы в пределах файлового древа ни находился пользователь, ввод им директивы
$ Documents
нечувствительно сделает текущим каталогом /home/username/Documents
То есть опция autocd
и массив переменных cdpath
отнюдь не исключают, а прекрасно дополняют друг друга.