Трюки в bash

5 сентября 2008
Рубрика: Linux, Ubuntu, Заметки
Теги: , ,

Zeboton

Те кто перешёл на Linux скорее всего уже не раз использовали командную строку для установки или настройки чего либо. В начала мне, как и всем кто был воспитан на Windows, такой способ управления компьютером казался очень сложным и не правильным. Но чем больше я работал с терминалом, тем больше я понимал всё удобство работы именно таким способом.

Особенно удобно стало работать в терминале, когда я узнал о специальных командах bash.

История и bang-bang

История команд — очень удобный инструмент. С помощью стрелок вверх-вниз можно перемещаться по истории введённых команд. Кроме того, с помощью команды history можно просмотреть всю историю команд:

190 ps axu | grep htt
191 /www/bin/apachectl start
192 vi /usr/local/lib/php.ini
193 cat /www/logs/error_log
194 ps -auxw | grep http
195 pwd

Ничего удивительного.
Гораздо интереснее то, что называется bang-bang, или команда !!
!! означает последнюю команду в истории. Т.е. ввод !! в данном случае аналогичен вводу pwd.
Но и это еще не все. Можно ввести ! . ! ps в данном случае вызовет ps -auxw | grep http. Но будьте внимательны и сообщайте восклицательному знаку достаточно символов команды. Например ! p в данном случае будет аналогично pwd, а не ps -auxw | grep http (поскольку pwd ниже в истории) как возможно хотелось бы.

: p не просто смайлик

Для того чтобы избежать конфузов при использовании ! можно добавлять к нему смайлик : p. Это заставит bash вывести то, что он собирался выполнить. Кроме того, : p достаточно умен для того, чтобы добавить выведенную команду в историю.

В качестве примера:
! ps: p в нашем случае вернет ps -auxw | grep http. Убедившись что это именно то что нужно, можно ввести !! и bash выполнит ps -auxw | grep http.

Другие способы использования истории

Наверное самый примитивный способ — вызвать команду history, узнав номер необходимой команды, а затем использовать ! N, где N — номер команды в истории (например, !192). Не следует пренебрегать этой возможностью. Иногда запомнить !123 для какой-то постоянно нужной команды гораздо проще чем пользоваться другими способами.
Кстати, : p работает и тут.

Еще один удобный способ — нажать ^r (Ctrl-r) и начать вводить первые символы нужной команды. bash будет искать в истории подходящие команды.

Работа с агрументами

!$ (bang-dollar) означает последний аргумент последней команды.
К примеру тут:
ls /some/long/path/to/dir/
rm -rf !$

В результате выполниться команда rm -rf /some/long/path/to/dir/.

Кстати, : p тут тоже работает.

!* похожа на !$, но превращается во все аргументы последней команды.

Шапочки

Наверняка вы не раз вводили что-то типа
vi /etc/X22/xorg.conf

Это очень легко поправить с помощью шляпок:
^22^11 заменяет 22 на 11 в предыдущей команде. По аналогии всегда можно использовать ^ошибка^исправление.

Автодополнение

Ну и разумеется не стоит забывать про автодополнение. Один Tab дополняет команду насколько можно понять, второй выводит все варианты дальнейшего написания. Однако не следует этим злоупотреблять. Согласитесь, написать less быстрее, чем написать le и долбить по табу.

Алиасы

Полезно дать короткие имена часто используемым командам. Также полезно дать алиасы наиболее частым опечаткам.
Полезными алиасами могут быть:
alias ls='ls --color=auto'
alias mroe='more'
alias H='kill -HUP'
alias ssh-production='ssh www.myproject.com'
alias ssh-qa='ssh qa.myproject.com'
alias sl='ls'

Похожие записи: