Советы и подсказки по 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 удобней. Если у вас есть свои хитрости на этот счет, добавляйте в комментарии!

Плюшевый пингвин
Купить!

Комментариев: 19

  1. Pashka R. пишет:

    !! — заменяет на последнюю выполненную команду

  2. Алескей пишет:

    ~ — синоним домашнего каталога пользователя. cd ~ — возвращает в домашний каталог.

  3. gav пишет:

    PROMPT_COMMAND=’history -a’
    Не работает. При открытии консоли пишет

    bash: -a’: command not found

    Или так и должно быть?

  4. pavlinux пишет:

    Есчо вспомнил…
    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 - удаление одного символа слева.

  5. admin пишет:

    gav, там обычные одинарные кавычки должны быть, wordpress их на ` заменил

  6. gmarik пишет:

    !vim - запустить последнюю(в истории) команду которая начинается с vim

  7. gav пишет:

    2admin thx, в упор не видел, что кавычки косые :)

  8. gmarik пишет:

    у кого пропал тайтл в гном-терминале - фикс:
    PROMPT_COMMAND=”$PROMPT_COMMAND;history -a”

  9. KonishchevDmitry пишет:

    Большое спасибо за статью. В который раз убедился, что слишком плохо знаю возможности великого bash. Да, если кому интересно, здесь - http://konishchevdmitry.blogspot.com/2007/08/bash.html я описал некоторые полезные горячие клавиши, которые, думаю, знакомы не каждому.

  10. Vadim пишет:

    2Андрей
    Для перехода в домашний каталог достаточно выполнить команду cd без аргументов.

  11. pavlinux пишет:

    По поводу применения Ctrl+T могу предложить заменить Ctrl на Esc, тогда transpose будет применяться не к символам, а к словам. Вот тогда польза очевидна: вводим часть названия команды, дополняем по Tab, вбиваем заветные три буквы (man, а не то что Вы подумали) и жмём Esc+T, Enter :)

  12. Pass пишет:

    Спасибо тебе! Твои советы очень пригодятся…

  13. Tyrg пишет:

    спасибо вам всем! много нового узнал про линуху!

  14. MockSoul пишет:

    Ох братцы, вы ещё zsh не смотрели..

  15. Azazzelo пишет:

    Что такое zsh ?

  16. Sables пишет:

    “zsh” Эээ… можно по точне это где?

  17. gall пишет:

    Вот как раз этого я и не знал. Спасибо за ценную инфу

  18. Serg пишет:

    Очень полезные советы по башу. Большое спасибо за статью!

  19. Николай пишет:

    Новичкам, которые баш еще не освоили целиком - им самое оно будет :)

Оставьте свой отзыв!