Советы и подсказки по bash
Перевод заметки Bash tips and tricks
Для непосвященных, bash - командная оболочка по умолчанию во многих Linux-дистрибутивах, включая Fedora, Ubuntu, Redhat и др. Используя операционную систему Linux-семейства, вы, вероятно, используете и bash. По этой причине ниже я собрал несколько часто возникающих проблем с bash и простые способы их решения.
1. Потеря истории команд
Если открыть окно терминала и ввести несколько команд, а после открыть второе окно, то история команд bash во втором окне не будет содержать команд из первого. К тому же, если закрыть первый терминал, а затем второй, то история команд из первого терминала будет перезаписана вторым. Вдвойне неприятно!
Так происходит из-за того, что история команд записывается только при закрытии терминала, а не после каждой команды. Это можно исправить.
Для этого надо отредактировать файл .bashrc (начинающим: любой файл, начинающийся с точки, является скрытым - служит для хранения пользовательских настроек).
nano ~/.bashrc
sudo здесь не нужно, это файл пользователя, а не настройка системы. Мне нравится nano, но можно использовать любой редактор: gedit, kate, mousepad, vi или emacs
добавить строки
shopt -s histappend
PROMPT_COMMAND='history -a'
И сохранить. (Ctrl-O для записи. “^” означает клавишу “Ctrl” в nano и других программах. ^X для выхода)
Так история команд будет добавляться к старой, а не перезаписывать ее, и запись будет происходить каждый раз в момент отображения подсказки bash.
2. Глупые ошибки в написании
Добавьте
shopt -s cdspell
опять-таки в .bashrc. Таким образом ошибки в написании (например, ect вместо etc) будут исправляться.
3. Дубликаты в истории команд
Я часто набираю cd .. несколько раз подряд, и когда я нажимаю клавишу “вверх”, чтобы вернуться к ранее введенным командам, я не хочу, чтобы мне постоянно напоминали о моих неоптимальных передвижениях по файловой системе.
Добавьте
export HISTCONTROL="ignoredups"
опять таки к .bashrc.
Или даже лучше, добавьте
export HISTIGNORE="&:ls:[bf]g:exit"
Это позволит избавиться от дубликатов, а также от ls, bg, fg и exit, что сделает историю команд bash более читабельной.
4. Разорванные многострочные команды в истории команд
Добавьте
shopt -s cmdhist
в .bashrc, и многострочные команды будут записываться в одну строку, что облегчит редактирование.
5. Пара дополнительных советов от комментаторов
Нажмите Ctrl-R в bash, далее начните набирать команду. Так искать в истории команд гораздо быстрее, чем нажимать 300 раз “вверх”.
Также можно искать при помощи
history | grep "foo"
Команда
cd -
осуществляет возврат к последней посещенной директории - бывает полезно, когда нужно перейти куда-то чтобы что-то изменить, а затем быстро вернуться назад.
Нажатие “Esc”+”.” вызывает последний упомянутый объект. Например, если набрать cat /etc/apt/sources.list, а затем rm и нажать “Esc”+”.”, то команда будет автоматически завершена: rm /etc/apt/sources.list. Попробуйте!
Заключение
Вот несколько советов, как сделать историю команд bash удобней. Если у вас есть свои хитрости на этот счет, добавляйте в комментарии!

13 Декабрь 2007 в 18:34
!! — заменяет на последнюю выполненную команду
13 Декабрь 2007 в 20:52
~ — синоним домашнего каталога пользователя. cd ~ — возвращает в домашний каталог.
14 Декабрь 2007 в 02:15
PROMPT_COMMAND=’history -a’
Не работает. При открытии консоли пишет
bash: -a’: command not found
Или так и должно быть?
14 Декабрь 2007 в 02:50
Есчо вспомнил…
1.) ———————————————–
!* - повтор аргумента предыдущей команды.
т.е. вводим например
# echo date
date
# !*
Птн Дек 14 03:37:30 MSK 2007
или так применить можно:
# echo date
date
# echo !*
/bin/date
2.) ————————————————
И ещё на тему “!”
!n - где n = signed int
вызов команды из истории (~/.bash_history)
т.е. набираем, например:
# ls
# df
# ps
# du .
# date
# ls -ha
потом
# !-3
выполнится du ., а
# !3
выполниться ps
Угадайте что будет при:
# !2!*
3.) ——————————————————-
Набираете в консоле, например echo xйy и жмете Ctrl+T
Или вот так, набираете например
echo 0123456789, и переводите курсор на цифру 1, жмете Ctrl+T и держите
до пока-не-надоест. строка станет вида 1234567890
Вывод: Crtl+T меняет местами последние два символа.
Кто скажет или придумает, рациональное обоснование для чего
это можно использовать, скажу спасибо. =)
4.) ———————————————————————
Ctrl+L - очистка экрана
Ctrl+H - удаление одного символа слева.
14 Декабрь 2007 в 09:51
gav, там обычные одинарные кавычки должны быть, wordpress их на ` заменил
14 Декабрь 2007 в 10:26
!vim - запустить последнюю(в истории) команду которая начинается с vim
14 Декабрь 2007 в 15:17
2admin thx, в упор не видел, что кавычки косые
14 Декабрь 2007 в 16:01
у кого пропал тайтл в гном-терминале - фикс:
PROMPT_COMMAND=”$PROMPT_COMMAND;history -a”
14 Декабрь 2007 в 21:52
Большое спасибо за статью. В который раз убедился, что слишком плохо знаю возможности великого bash. Да, если кому интересно, здесь - http://konishchevdmitry.blogspot.com/2007/08/bash.html я описал некоторые полезные горячие клавиши, которые, думаю, знакомы не каждому.
15 Декабрь 2007 в 13:18
2Андрей
Для перехода в домашний каталог достаточно выполнить команду cd без аргументов.
26 Декабрь 2007 в 07:34
По поводу применения Ctrl+T могу предложить заменить Ctrl на Esc, тогда transpose будет применяться не к символам, а к словам. Вот тогда польза очевидна: вводим часть названия команды, дополняем по Tab, вбиваем заветные три буквы (man, а не то что Вы подумали) и жмём Esc+T, Enter
16 Январь 2008 в 13:10
Спасибо тебе! Твои советы очень пригодятся…
8 Февраль 2008 в 14:47
спасибо вам всем! много нового узнал про линуху!
21 Февраль 2008 в 09:05
Ох братцы, вы ещё zsh не смотрели..
28 Февраль 2008 в 08:13
Что такое zsh ?
28 Май 2008 в 05:57
“zsh” Эээ… можно по точне это где?
2 Июнь 2008 в 10:00
Вот как раз этого я и не знал. Спасибо за ценную инфу
15 Сентябрь 2008 в 10:42
Очень полезные советы по башу. Большое спасибо за статью!
27 Сентябрь 2008 в 01:08
Новичкам, которые баш еще не освоили целиком - им самое оно будет