Cintu и Zsh. Подстановка команд и аргументов

Алексей Федорчук

Эффективное использование любой командной оболочки предполагает минимизацию нажатия клавиш пальцами. Для этого существует несколько приёмов, одни из которых — общие для всех развитых командных оболочек, другие же специфичны для Zsh. К числу первых относится, например, повторение команд и аргументов.

Для повторения последней введённой команды служит удвоенный символ восклицательного знака — !!. Например, команда

$ ls /usr/share/fonts

выведет содержимое указанного каталога:

cmap/  fira-mono/  fira-sans/  Input-Font/ …

Если же теперь ввести

$ !!

и нажать Enter, мгновенно последует такой вывод:

ls /usr/share/fonts
cmap/  fira-mono/  fira-sans/  Input-Font/

Символ !! может быть использован как аргумент другой команды — в этом случае на его место будет подставлена предыдущая команда. Например, если по забывчивости попытаться установить какой-либо пакет от имени обычного пользователя командой

$ apt install  apt-file

последует сообщение об ошибке такого содержания:

E: Не удалось открыть файл блокировки /var/lib/dpkg/lock - open (13: Отказано в доступе)
E: Не удалось выполнить блокировку управляющего каталога (/var/lib/dpkg/); у вас есть права суперпользователя?

Очевидно, что для установки пакета требуются привилегии администратора, которые в данной ситуации резонно разово получить командой sudo. А чтобы не вводить вручную предыдущую конструкцию, её можно подменить !!:

$ sudo !!
sudo apt install apt-file
[sudo] пароль для alv:

Существует и способ повторения аргументов введённых ранее команд, причём повторения последовательного. Так, если вслед за выполнением приведённой ранее команды

$ ls /usr/share/fonts

сразу же набрать в просто ls последовательно клавишу Escape и клавишу символом точки ., то в командной строке появится тот же путь, что и ранее. Причём перед отправкой команды на исполнение его можно отредактировать, например, дописав в него следующий по вложенности подкаталог:

$ ls /usr/share/fonts/Input-Font/

По исполнении этой команды первое после набора ls нажатие Escape+. вызовет предыдущий аргумент, второе — предпоследний, то есть /usr/share/fonts, и так далее. Однако тут надо быть внимательным: комбинации Escape+. до лампочки, к какой команде она подставляет аргументы, и со временем в строке окажется что-то совсем не подходящее, например:

$ ls apt-file

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

Моя Cintu. Оглавление

Добавить комментарий