Bash (Русский)
Bash (Bourne-again Shell) — командная оболочка/язык программирования проекта GNU. Название представляет собой отсылку к предшественнику, существовавшей некогда командной оболочке Борна (Bourne shell). Bash работает в большинстве UNIX-подобных операционных систем, в том числе и в GNU/Linux.
В Arch Linux Bash является командной оболочкой, используемой по умолчанию.
Запуск
    
Поведение Bash зависит от способа, каким он был запущен.
Если Bash был вызван в TTY в процессе работы команды login, демоном SSH или другим схожим образом, то он считается оболочкой входа (login shell). Этот режим также можно выбрать флагом /.
Bash считается интерактивной оболочкой (interactive shell), если его стандартные потоки ввода/вывода/ошибок подключены к терминалу (например, при запуске в эмуляторе терминала), причём запуск выполнялся без опции  и не с неопциональным аргументом (вроде bash скрипт). Все интерактивные оболочки при запуске считывают файлы /etc/bash.bashrc и , а интерактивные оболочки входа — также  и .
Файлы настроек
    
В зависимости от способа запуска Bash считывает и исполняет определённый набор файлов. Подробнее см. раздел Bash Startup Files справочного руководства GNU Bash.
| Файл | Описание | Оболочки входа (см. примечание) | Интерактивные оболочки (не входа) | 
|---|---|---|---|
| Системный, считывает и исполняет файлы  и /etc/bash.bashrcс настройками приложений. | |||
| Пользовательский, исполняется после . Если не существует, проверяются  и  (в указанном порядке). Файл-образец /etc/skel/.bash_profileсодержит также указание на исполнение файла . | |||
| Пользовательский, исполняется после выхода из оболочки входа. | |||
| /etc/bash.bash_logout | Системный, исполняется после выхода из оболочки входа. Зависит от флага компиляции . | ||
| /etc/bash.bashrc | Системный, исполняет файл . Зависит от флага компиляции . | ||
| Пользовательский, исполняется после /etc/bash.bashrc. | 
Оболочка и переменные окружения
    
Поведение оболочки Bash и запущенных в ней программ зависит от переменных окружения. Переменные окружения хранят значения различных параметров оболочки, например, расположение каталогов с исполняемыми файлами или название используемого по умолчанию браузера. При запуске новой оболочки или сценария они наследуют переменные окружения родительского процесса, то есть начинают работу с набором переменных исходной оболочки .
Для создания переменной окружения необходимо экспортировать переменную оболочки:
VARIABLE=content export VARIABLE
или более кратко:
export VARIABLE=content
Переменные окружения принято перечислять в файлах или , чтобы другие Bourne-совместимые оболочки могли их использовать.
Подробнее см. Переменные окружения.
Командная строка
    
Командная строка Bash работает под управлением библиотеки Readline. Readline позволяет использовать комбинации клавиш в стиле emacs и vi для взаимодействия с командной строкой, например, для перемещения назад и вперёд целыми словами, удаления слов и т.д. Кроме того, Readline отвечает за хранение истории выполненных команд, а также позволяет создавать макросы.
Автодополнение
    
Автодополнение (tab completion) — завершение вводимых команд по нажатию клавиши (работает по умолчанию).
Одиночное нажатие
    
Вывести список возможных завершений для частично введённой команды можно несколькими повторными нажатиями клавиши — иногда двумя или тремя. В статье Readline#Быстрое завершение описано, как уменьшить количество нажатий до одного.
Дополнительные программы и опции
    
По умолчанию Bash позволяет дополнять команды, имена файлов и переменные. Пакет  добавляет автодополнение для наиболее распространённых команд и их опций, которые можно включить, считав и исполнив файл  (обычно считывается автоматически в /etc/bash.bashrc). С пакетом  обычные завершения (вроде ) будут вести себя немного по-другому, вернуть старое поведение можно командой $ compopt -o bashdefault программа (подробнее см.  и ).
Настройки для команд
    
По умолчанию Bash помогает завершать только имена файлов, которые следуют за командой. Это можно перенастроить командой , чтобы дополнялись и определённые команды:
С флагами завершаться будут и команды, и имена файлов после них:
Другие опции автодополнения можно найти в руководстве Bash.
Автодополнение истории
    
Клавиши стрелок "вверх" и "вниз" можно назначить для поиска команд в истории (см. Readline#История команд и Синтаксис init-файлов Readline):
Или же, чтобы это работало во всех программах Readline:
~/.inputrc
"\e[A": history-search-backward "\e[B": history-search-forward
Сокращение истории
    
Переменная позволяет предотвратить логирование некоторых команд. Например, чтобы одинаковые команды не попадали в историю, присвойте переменной следующее значение:
Если же задать значение erasedups, то дополнительно из истории будут удалены уже существующие дубликаты команд. Подробнее см. руководство Bash.
Отключение истории
    
Чтобы временно отключить историю, выполните:
$ set +o history
После этого вводимые команды не будут сохраняться в .
Теперь можно выполнять "чувствительные" в плане безопасности действия, вроде вычисления хэш-суммы пароля () или работы с GPG (), не опасаясь, что секретный ключ будет сохранён на диск.
Включить историю обратно можно командой
$ set -o history
Чтобы отключить всю историю Bash:
После необходимо удалить старый файл истории (имейте в виду — команды ниже удалят его безвозвратно):
$ wipe -i -l2 -x4 -p4 "$HISTFILE" $ ln -sv /dev/null "$HISTFILE"
run-help из Zsh
    
В Zsh есть возможность вызывать справочное руководство для команды перед курсором по комбинации клавиш . В Bash то же самое можно сделать с помощью привязки комбинации клавиш в Readline:
Предполагается, что вы используете (стандартный) режим редактирования Emacs.
Псевдонимы
    
alias (англ. псевдоним) — команда для замены одной строки на другую. Часто используется для сокращения системных команд до аббревиатур или для добавления стандартных аргументов к часто используемым командам.
Пользовательские псевдонимы хранятся в файле , а системные (для всех пользователей) — в /etc/bash.bashrc. Примеры можно посмотреть в .
Функции Bash подробно описаны в Bash/Функции.
Советы и рекомендации
    
    Настройка приглашения
    
Подстветка синтаксиса и подсказки
    
blesh-gitAUR — редактор командной строки, который написан на чистом Bash и предназначен заменить Readline. Предлагает множество дополнительных возможностей вроде подстветки синтаксиса, подсказок, завершения команд с выпадающим меню, аббревиатур, режима редактирования Vim, хук-функций и т.д.
После установки необходимо считать и выполнить его в интерактивном сеансе. Настройки подробно объясняются в файле ~/.blerc и wiki. Доступна также стабильная сборка .
Command not found
    
В pkgfile есть хук "command not found", который при вводе неизвестной команды автоматически ищет подходящий исполняемый файл в пакетах в официальных репозиториях.
Чтобы хук заработал, его необходимо считать и исполнить:
После этого при попытке запустить недоступную команду будет выведена следующая информация:
$ abiword
abiword may be found in the following packages: extra/abiword 3.0.1-2 /usr/bin/abiword
Отключение комбинации Ctrl+z
    
Нажатие в терминале ставит приложение на паузу или закрывает его. Отключить эту комбинацию клавиш можно следующим образом:
#!/bin/bash trap "" 20 adom
Если после этого во время работы вы по ошибке вместо нажмёте комбинацию , то она будет проигнорирована и ничего не произойдёт.
Очистка экрана после выхода
    
Очистка экрана виртуального терминала после выхода:
Смена каталога при вводе пути
    
Bash может автоматически добавлять команду , если введён только путь к каталогу. Стандартное поведение:
Если же добавить в .bashrc строку
то произойдёт следующее:
[user@host ~]$ /etc cd /etc [user@host etc]$
Autojump
    
autojump-gitAUR позволяет перемещаться по файловой системе с помощью поиска строк в базе данных с часто посещаемыми путями. Чтобы приложение заработало, после установки необходимо считать и выполнить файл .
Запрет на перезапись файлов
    
Отключение перезаписи файлов с помощью перенаправления вывода на время текущего сеанса:
$ set -o noclobber
Команда делает то же самое.
Сделать изменения постоянными:
Принудительно перезаписать файл при установленном :
$ echo "output" >| file.txt
Решение проблем
    
    Перенос строк при изменении размера окна
    
При изменении размера окна эмулятора терминала Bash может не получить соответствующий сигнал. В результате выведенный текст будет переноситься некорректно и перекроет приглашение командной строки. Опция оболочки проверяет размер окна после каждой команды и при необходимости обновляет значения переменных и .
~/.bashrc
shopt -s checkwinsize
Оболочка завершается даже с опцией ignoreeof
    
После задания опции  вы можете обнаружить, что многократное нажатие Ctrl-d всё равно приводит к завершению процесса оболочки. Дело в том, что по умолчанию эта опция позволяет игнорировать только 10 нажатий данной комбинации клавиш (если быть точным — 10 ситуаций EOF) перед выходом из оболочки.
Задать большее значение можно переменной IGNOREEOF. Например:
export IGNOREEOF=100
Анализ сценария и поиск ошибок
    
Программа проверяет сценарии Bash (и других командных оболочек) на предмет ошибок и предлагает возможные улучшения кода.
Существует также веб-сайт shellcheck.net, разработанный на основе одноименной программы и предназначенный для той же цели.
Смотрите также
    
- Wikipedia:ru:Bash
- Справочное руководство Bash, также локально в файле
- Синтаксис init-файлов Readline
- The Bourne-Again Shell — Третья глава книги The Architecture of Open Source Applications
- PS1 generator — Наглядное создание приглашения Bash с помощью мыши
- Полезные команды для .bashrc