The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Удобная работа в Bash (bash shell console)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: bash, shell, console,  (найти похожие документы)
From: Tigro <http://tigro.info>; и EraZer <http://storinka.com.ua>; Date: Mon, 3 Jan 2008 14:31:37 +0000 (UTC) Subject: Удобная работа в Bash Оригинал: http://tigro.info/blog/index.php?id=418 http://storinka.com.ua/2007/12/25/udobnaya-rabota-v-bash/ Тут приведены некоторые полезные хитрости, направленные на более удобное использование командной строки. Все мы не хотим повторно набирать какую-то длинную команду и ищем ее в истории. Тут - пара трюков от том, как можно энто самое удобство малость повысить. 1. Потеря комманд в .history Многие пользуются стандартными гномовским или кдешным эмуляторами терминала. У них есть возможность открывать в одном окне несколько оболочек - каждую в отдельной вкладке. bash по умолчанию пишет в историю набранные за сеанс команды только при своем закрытии (перед самоликвидацией). Поэтому при открытии нового терминала в другой вкладке вы не увидите только что набранные команды из первой вкладки - они еще не записаны в хистори. К тому же закрыв первый терминал, а потом второй вы не найдете в истории команд набранных в первом терминале. Потому что по умолчанию bash не дописывает файл .history, а переписывает. Исправить ситуацию можно, дописав в конфигурационный файл ~/.bashrc пару строк shopt -s histappend PROMPT_COMMAND='history -a' Теперь каждая введенная вами команда будет писаться в историю сразу же. Не бойтесь - дырку на жестком месте такая конфигурация не протрет. Не так уж часто вы команды в баше набираете. :) Да и слава богу кеширование дисков пока еще рулит. 2. Эвристическое исправление ошибок директорий Если дописать такую строчку shopt -s cdspell то bash будет пытаться исправлять допущенные вами опечатки (пропуски и перестановки символов, например /ect/init.d вместо /etc/init.d) в пути у команды cd. Не бойтесь, у rm такая фича работать уже не будет. Только у cd. 3. Не писать в историю подряд идущие строки-дубликаты Пишем в ~/.bashrc export HISTCONTROL="ignoredups" А если вы не хотите, чтобы в историю попадали вызовы каких-то "неинформативных" команд, то их логирование можно запретить: export HISTIGNORE="&:ls:[bf]g:exit" После этой команды в хистори не будут писаться команды &, ls, bg, fg, exit. Можно дописать и свои, через двоеточие, можно использовать шаблоны. 4. Не разрывать многострочные команды Еще команда в конфигурационный файл shopt -s cmdhist 5. Поиск по истории команд Иногда команды бывают большими и сложными, и чтобы заново ее не писать и не искать по истории 100 раз нажимая "вверх", можно воспользоваться поиском. Если вы помните кусочек команды которую хотите найти, то можно просто нажать в bash'e комбинацию Ctrl + R и набрать этот кусочек. bash вам покажет последнюю команду с такой подстрокой. Можно продолжать нажимать Ctrl + R и bash будет выдавать более старые подходящие команды, подходящие под искомую строку. 6. Вернуться в предыдущую директорию Когда мы работаем в какой-то директории, и нам нужно "выбраться" в другую директорию, что-то там поделать и вернуться назад, можно воспользоваться "cd -", например [kpblca@localhost html]$ cd /var/www/html [kpblca@localhost html]$ cd /etc/ [kpblca@localhost etc]$ vi my.cnf [kpblca@localhost etc]$ cd - /var/www/html [kpblca@localhost html]$ Эта команда вернет нас в директорию где мы были раньше. ЗЫЖ Дополнительно можно почитать man bash и найти там описание всех опций у shopt. Может быть еще что-то вам тоже пригодится.
Для многих Linux-дистрибутивов в качестве командной оболочки по умолчанию используется Bash. Часто, в процессе работы с данной оболочкой "достают" те или иные неудобства, но на поиски их решения либо нет времени, либо просто много лени... В данном выпуске описаны некоторые раздражающие в работе моменты и возможные пути их решения. 1. Затирание истории команд Если вы работаете в терминале, то при открытии второго терминала последний не будет "помнить" тех команд, что вы вводили только что в первом. К тому же, если вы закроете первый терминал, а чуть позже - второй, то сохранится только история команд второго терминала (последнего закрытого). Так происходит потому что запись истории команд происходит в момент закрытия терминала, - а не после каждой введенной команды. Решение: В файл ~/.bashrc добавить такие строки: shopt -s histappend PROMPT_COMMAND='history -a' Это приведет к тому, что Bash впредь будет дополнять историю команд, а не перезаписывать ее. 2. Случайные опечатки Бывает, что при быстром наборе команды, вы пишете, например, "ect" вместо "etc" - и узнаете об ошибке только набрав километровой длины строку и нажав Enter... Решение: В этом случае может помочь указание в файле .bashrc такой строки shopt -s cdspell Теперь после ввода команды "cd /ect" вы попадете в каталог "/etc" 3. Дубликаты команд в хистори Часто в работе приходится давать несколько одинаковых команд подряд. Например "cd .." или "ps ax | grep something". В результате, история команд захламляется дубликатами строк, после чего бывает непросто добраться до истории команд, введенных ранее. Решение: добавить в .bashrc строку export HISTCONTROL="ignoredupes" Это избавит от записи в истории дубликатов команд. Можно пойти еще дальше, и запретить запись в историю команд ls, bg, fg и exit. Делается это добавлением строки export HISTIGNORE="&:ls:[bf]g:exit" 4. Многострочные команды разбиваются в истории на несколько строк При наборе команды в несколько строк, она сохраняется в истории как набор не связанных между собой строк. Что бывает совсем неудобно. Решение: Добавить в файл .bashrc строку shopt -s cmdhist После этого можно будет вызывать многострочные команды из хистори одной строкой. 5. Быстрый поиск команды в хистори Чтобы найти какуюлибо команду (например, ping) в истории, можно сделать так: history | grep "foo" Но это неудобно и совсем не функционально. Решение: Нажать комбинацию клавиш CTRL+R - после этого найти нужную команду по вводимому сочетанию букв. 6. Как перейти в последнюю директорию? При работе часто возникает ситуация, когда нужно сделать что-либо, а для этого приходится метаться между двумя директориями. Каждый раз набирать имя директории (пусть даже используя автодополнение) - неудобно. Решение: Использовать команду cd - После чего вы перейдете в директорию, в которой только что были (до выполнения этой команды). 7. Как обратиться к объекту, с которым только что работал? Представим ситуацию: сисадмин проводит неспешный осмотр каталогов своих пользователей, вытирая в процессе "ненужный хлам" - например, заготовленные непосильным трудом несколько гигабайт мп3-музыки. Положим, что делает он это примерно так: ls /home/user/mp3 rm -rf /home/user/mp3 В данном случае будет полезно воспользоваться таким сочетанием клавиш: ESC . (нажать "ESC", а потом "." последовательно) Как результат, сработает автодополнение, используя объект, к которому было последнее обращение. В данном случае, если набрать команду "ls /home/user/mp3'', затем набрать "rm -rf" и потом нажать последовательно ESC и . - то после набранного "rm -rf" командная строка автоматически дополнится "/home/user/mp3''.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, Герман (??), 12:39, 27/10/2017 [ответить]  
  • +/
    Вроде как вместо " . (нажать "ESC", а потом "." последовательно)" гораздо удобнее (в плане быстрее) набрать !$ - эти два знака заменятся на последнюю часть аргумента (до пробела) прошлой команды.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру