Курс выживания в консоли

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.

Назад на стр. 061-080-5  Содержание  Вперед на стр. 061-080-7