Курс выживания в консоли
Andrushock
Xakep, номер #061, стр. 061-080-6
Alt+b - перемещает курсор на одно слово назад;
Ctrl+k - удаляет часть строки от курсора до конца;
Ctrl+w - удаляет часть строки от курсора до начала;
Ctrl+u - удаляет всю строку;
Ctrl+l - очищает экран.
Никогда не любил историю
Для того чтобы каждая введенная в оболочке команда сохранялась в списке выполненных команд, нужно задать следующие переменные окружения:
HISTFILE=~/.zhistory
HISTSIZE=1024
SAVEHIST=1024
Я предпочитаю с каждой сессией создавать новую историю команд:
HISTFILE=/dev/null
Существует целый набор встроенных программ и псевдонимов для работы с историей выполненных команд. Приведу часть из них:
$ h (псевдоним) - посмотреть историю команд;
$ fc -l 1 10 - посмотреть историю команд с первой по десятую;
$ fc 2 - отредактировать вторую введенную команду;
$ !! - повторить последнюю команду (на сленге bang-bang);
$ !12 - выполнить 12-ую команду из буфера истории;
$ !p - выполнить из буфера команду, начинающуюся на букву "p".
Работать с историей команд можно с помощью следующих комбинаций клавиш:
Ctrl+r (стрелка вверх) - поиск в обратном направлении;
Ctrl+n (стрелка вниз) - поиск в прямом направлении;
Atl+< - переход к первой команде в буфере истории;
Atl+> - переход к последней команде в буфере истории.
Научите меня писать без ошибок
С помощью проверки правописания можно скорректировать ошибки при написании команд, имен файлов и даже опций. Подключаем автокоррекцию:
$ setopt CORRECT
Теперь попробуем сознательно допустить ошибку:
$ suod ls -alF
zsh: correct 'suod' to 'sudo' [nyae]?
Не нравится появившееся сообщение об ошибке? Меняем!
$ SPROMPT='zsh: correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) '
% suod ls -alF
zsh: correct suod to sudo ? ([Y]es/[N]o/[E]dit/[A]bort) y
Стоит отметить, что командой nocorrect разработчики предусмотрели своеобразный откат от этой опции, чтобы предотвратить автоматическую коррекцию аргументов для некоторых утилит:
alias mv='nocorrect mv'
alias cp='nocorrect cp'
alias mkdir='nocorrect mkdir'
Хешируем помаленьку
Именованные каталоги чем-то напоминают символические ссылки. Если в системе есть несколько труднодоступных каталогов, к которым тебе нужно периодически обращаться, то эта специфическая возможность оболочки просто создана для тебя:
hash -d ftp=/home/ftp
hash -d src=/home/root/src
hash -d www=/var/www/htdocs
Теперь вместо команды
$ cd /var/www/htdocs
можно использовать своеобразную закладку:
$ cd ~www
Пример шелл-кодинга
Ни для кого не секрет, что в *BSD присутствует несколько обрезанная версия программы kill, которая позволяет оперировать только идентификаторами процессов. А что нам мешает самим написать небольшую функцию, способную восполнить этот серьезный пробел?
pskill()
{
local pid
pid=$(ps -aux | grep $1 | grep -v grep | awk '{ print $2 }')
echo -n "Killing '$1' (process $pid)..."
kill -9 $=pid
echo " done."
}
Вуаля. Теперь можно работать и с именами:
# pskill silc
Killing 'silc' (process 26812)... done.
Постскриптумы
Как видишь, zsh разве что крестиком вышивать еще не научился. Галопом по европам я постарался рассказать о наиболее интересных и заслуживающих внимания свойствах этого уникального командного интерпретатора. К сожалению, информации об этой оболочке в Сети крайне мало, поэтому для домашнего чтения могу только посоветовать солидную справочную страницу zshall(1), руководство пользователя "Zsh Guide" и статьи Алексея Федорчука, посвященные zsh.