Хитрости 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