gladilov.org.ru gladilov.org.ua

Хитрости BASH и тонкости его настройки

BASH (bourne again shell) — командная среда, используемая по умолчанию во многих современных Linux-дистрибутивах. Если используется ОС из семейства Linux, то, скорее всего, используется и bash. Ниже приведены команды, опции настройки и разные трюки, придающие пользователю терминала более комфортную среду для работы (в BASH).

Показать

Настройка автодополнения и поиска в ~/.inputrc

Для одинарного нажатия Tab при автодополнении в ~/.inputrc (или в /etc/inputrc для всех пользователей)

set show-all-if-ambiguous On


Вывод по клавишам и  из истории только тех команд, которые начинаются с уже набранных букв

"\e[A": history-search-backward
"\e[B": history-search-forward

Тонкости настройки ~/.bashrc

Для записи истории команд сразу, а не только при выходе из шела, необходимо добавить

shopt -s histappend
export PROMPT_COMMAND="history -a"


Для запрета записи дубликатов команд в историю

export HISTCONTROL="ignoredups"


Можно запретить логирование определённых команд

export HISTIGNORE="ls:[bf]g:exit"

Список исключений — через двоеточие, можно использовать шаблоны.


Эвристическое исправление ошибок а именах директорий

shopt -s cdspell


Звуковой сигнал при запуске оболочки

export PROMPT_COMMAND="echo -ne '\a'"

можно использовать по разнному, например — включить мигание окна KiTTY.


Для того, чтобы не разрывать многострочные команды, используется

shopt -s cmdhist


Если вписать

export HISTTIMEFORMAT='%d %h %Y %H:%M:%S '

то в истории будут записаны дата и время выполнения команды.


Использование регистронезависимых масок файлов

shopt -s nocaseglob

Тогда, к примеру

ls *.jpg

выведет не только *.jpg, но и *.JPG.

Хитрости BASH

Возврат в предыдущую директорию

cd -


При нажатии ESC и сразу за этим . (в терминологии *nix — Meta .) в строку подставится последний использованный объект. Например, если первой строкой набрано

ls /home/smbdy/logs

во второй наберите

rm ESC .

получите

rm /home/smbdy/logs


Реализация ввода пользовательского пароля с проверкой:

echo -n "Пользователь: "
read username
echo -n "Пароль: "
read -s password
echo -en "\nПовторите пароль: "
read -s password2 && echo -e "\n"
if [ "$password" != "$password2" ]; then
    echo -e "Пароли не совпадают.\nЗавершение работы." && exit 1
fi
echo -n "Всё верно, $username. Продолжаем." && echo -e "\n"


Копирование config.cfg в config.cfg-old

cp config.cfg{,-old}


Узнать, какой шел запущен

echo $0


Строка вида ^строка1^строка2 запустит предыдущую команду с заменой строки1 на строку2

$ ehco foo bar baz
bash: ehco: command not found
$ ^ehco^echo
foo bar baz


Переименование файла в такой-же, но с префиксом

mv long-file-name.txt prefix-!#^

Например, команда

mv file-with-long-name-typed-with-tab-completion.txt old-!#^

переименует ’file-with-long-name-typed-with-tab-completion.txt’ в файл с именем ’old-file-with-long-name-typed-with-tab-completion.txt’.


Функция быстрого переименования расширений

renamer() {
   local fn
   for fn in *."$1"; do
     mv "$fn" "${fn%.*}"."$2"
   done
}

Пример: renamer doc txt — переименует все доки в txt’шники в текущем каталоге.


Если определить функцию command_not_found_handle (), то можно обрабатывать ситуацию «команда не найдена». До выдачи сообщения о не обнаруженной команде bash поместит в $1 введенную строку и выполнит код этой функции. При этом, если функция возвращает код завершения 127, то сообщение о ненайденной команде будет выведено на экран.


Для добавления алиаса с автоприменением определяем новый алиас в ~/.bash_aliases

alias editalias=’edit ~/.bash_aliases && source ~/.bash_aliases’


Имейте в виду, что для работы алиасов из этого файла он должен быть явно включён в вашем ~/.bashrc:

[ -f ~/.bash_aliases ] && source ~/.bash_aliases




Популярное
Наверх