Данная статейка уже носит чисто профессиональный характер — она для тех, кто работает в Unix и работает в bash, tcsh шеллах, а также работает с MySQL. Сейчас я расскажу о нескольких очень полезных «горячих» клавишах для работы в командной строке.
Если вы работаете раз от разу в bash, tcsh и других shell-ах, вы можете не знать про следующие, но очень удобные команды, которые облегчать вам жизнь под Unix:
- Ctrl + A — переход в начало текущей строки;
- Ctrl + E — переход в конец текущей строки;
- Стрелка вверх / Стрелка вниз — хождение по history командам соответственно к более старым командам / к более новым (это вы навярняка знаете)
- Ctrl + U — стирает все слева от текущей позиции курсора, то есть чтобы быстро очистить строку, можно сделать Ctrl + E и затем Ctrl + U
- Esc -> d — стирает слово справа (сначала нажимаем Esc, отпускаем, затем ‘d’)
- Tab — формирует законченный вид не до конца набранной команды, файла или директории. Для MySQL — еще таблицы, имени колонки. Если нет однозначности, то после повторного нажатия Tab выдаются варианты. Очень ускоряет процесс работы в командной строке, если вы не знали про это 😉
- Ctrl + PageDown — переход к самой последней (свежей) команде в history
- Ctrl + PageUp — переход к самой старой (первой) команде history
- Ctrl + R — самая ценная команда для меня — поиск в history. Делается так: нажимаем Ctrl + R, появляется приглашение ввести подстроку поиска ( (reverse-i-search)`’: ), далее мы вводим, например, «mysql» — видим самую последнюю команду shell-а, где встречалось подстрока «mysql». Если она нас не устраивает, то для повтора поиска тут же надо снова нажать Ctrl + R. Каждое нажатие Ctrl + R перемещает нас к более старым командам с подстрокой «mysql», которые мы когда либо исполняли. Если же нас найденная команда устраивает, нажимаем «Стрелка вправо» или «Стрелка влево» и приступаем к редактированию и исполнению команды. Это очень удобная и нужная команда!
Все эти команды — подмножество команд библиотеки readline (man 3 readline). Ее используют и другие программы, например MySQL. Но в MySQL есть то ли баг, то ли так задумано разработчиками. Суть ее в том, что MySQL версий 3.x, например, прекрасно исполнял команду поиска (Ctrl + R), но потом, по каким то причинам, новые релизы — MySQL 4.x & 5.x перестали работать с поиском. Скорее всего, это связано с тем, что раньше MySQL использовал readline библиотеку, но потом разработчики перешли на editline. И последняя перестала работать с поиском. Я долго мучался, пока не нашел решение. Оно следующее:
Создать файл ~/.editrc — конфиг для editline. Там мы пишем следующие строки:
bind "\e[3~" ed-delete-next-char bind "^R" em-inc-search-prev
После этого в MySQL 4.x & 5.x у нас будет работать Ctrl + R.
Другим решением для MySQL вместо редактирования .editrc будет использовать rlwrap программу (установка в Linux Fedora Core, например, такая: yum install rlwrap) — она «обертывает» stdout запускаемой программы и создает history для вводимых строк (хранит в ~/.commandname_history). У нее есть некоторые недостатки — на ввод паролей она делает echo, то есть пароль будет виден на экране. Можно с помощью опций отключить это, но это не идеально. Зато можно в нее обернуть любую программу, которая даже не имеет history вообще (rlwrap perl -MCPAN -e shell , например). Итак, второе решение для MySQL может быть таким:
alias mysql=’rlwrap -a mysql’
Это ставиться в ~/.bashrc, например. Или вместо алиаса можно просто запустить:
rlwrap -a mysql -uroot -p mysql
Man на rlwrap вы можете найти на сайте разработчика.
Вот такие вот тонкости, которые на 100% облегчат вам работу в Unix.
А еще есть «!» который работает примерно как Ctrl+R
> find …………
> ls
> !find
правда это проверено на csh/tcsh, bash не использую.
Проверил, тоже работает (в bash). Только очень примитивно — исполняет последнюю команду в history, где есть эта подстрока. Но возможности поискать и увидеть, что будет исполняться — нет. Так можно случайно исполнить и не то, что надо 😉