Управление поведением Bash с помощью shopt
Быстрые ссылки
The shopt Built-in
The shopt Options
Finding shopt in the Linux Manual
Setting and Unsetting Options
The autocd Option
The cdspell Option
The xpg_echo Option
The dotglob Option
The nocaseglob Option
Making Changes Permanent
Options as Far as the Eye Can See
Если вы тонко настраиваете поведение Bash с помощью shopt, вы получаете контроль над более чем 50 параметрами. В этой статье показано, как адаптировать систему Linux под свои привычки и задачи.

The shopt Built-in
shopt — это встроенная команда (built-in) в Bash. Устанавливать её не нужно — она присутствует во всех современных версиях Bash. Со временем в Bash добавлялись новые опции, поэтому в более старых версиях список опций может быть короче.
Если какая-то опция не работает, проверьте страницу справки для вашей версии Bash:
man bashИщите раздел, посвящённый shopt и списку опций. В этой статье мы пройдём по ключевым опциям, покажем, как ими управлять и приведём примеры. После этого вы сможете изучить man-страницу Bash или GNU Bash Reference Manual, чтобы выбрать опции, которые вам пригодятся.
Некоторые опции включены по умолчанию и задают поведение Bash «из коробки». Вы можете временно включить опцию — она вернётся в состояние по умолчанию при закрытии оболочки. Если нужно, чтобы изменение было постоянным, добавьте соответствующие команды в ваш файл инициализации (~/.bashrc).
The shopt Options
В современной Bash обычно доступно 53 опции shopt. Если выполнить shopt без аргументов, вы увидите весь список.
Чтобы посчитать количество строк в выводе, используют wc:
shopt | wcА чтобы красиво отобразить имена опций в колонках, применяют column:
shopt | column
Факт-бокс
- Количество опций: 53 (в большинстве современных сборок Bash).
- Доступ: встроено в Bash, не требует установки.
- Действие: глобальное для текущей сессии оболочки.
Поиск shopt в руководстве Linux
Раздел с shopt находится в разделе Bash man-страницы. Bash-документация объёмна (несколько тысяч строк), поэтому удобнее искать по слову:
man bash
/assoc_expand_once
После поиска ман покажет начало секции с описанием опций shopt.

Установка и снятие опций
Чтобы включить или выключить опции, используйте ключи -s и -u соответственно:
-s— set (включить).-u— unset (выключить).
Чтобы увидеть, какие опции включены в текущей сессии, выполните:
shopt -sА чтобы показать выключенные опции:
shopt -u | columnВы можете запросить состояние конкретной опции без -s/-u:
shopt histverifyВключить её можно так:
shopt -s histverifyЕщё раз проверить состояние:
shopt histverifyПример: histverify
Опция histverify изменяет поведение команды history/замены команд по истории. Обычно при вызове !245 команда сразу выполняется. С histverify команда подставляется в командную строку, и вы можете отредактировать её перед выполнением. Это удобно, если вы хотите проверить или поправить команду.
!245После установки histverify команда появится в приглашении, но не выполнится автоматически: вы сможете её отредактировать и нажать Enter для выполнения.
Основные полезные опции (подробно)
Ниже — ряд часто полезных опций с примерами и рекомендациями.
autocd — автопереход по имени каталога
Если autocd включён, ввод имени каталога будет трактоваться как cd название_каталога.
shopt -s autocd
DocumentsЭто удобно для интерактивной работы: вместо cd Documents достаточно набрать Documents и нажать Enter.
Важно: autocd не меняет поведение команд — только интерпретацию одиночных аргументов, которые выглядят как имена каталогов.
cdspell — автокоррекция опечаток в cd
cdspell автоматически исправляет простые опечатки в именах каталогов при использовании cd.
shopt -s cdspell
cd documents
cd ../PictturesBash попытается исправить ошибки и выполнить переход в нужный каталог. Это удобно, но не заменяет внимательную работу с путями в скриптах.
xpg_echo — обработка escape-последовательностей в echo
С включённой xpg_echo команда echo по умолчанию интерпретирует escape-последовательности, например \n и \t.
shopt -s xpg_echo
echo "This is line one\nThis is line two"Это аналогично использованию echo -e, но делает такую интерпретацию поведением по умолчанию.
dotglob — включать файлы с точкой в маски
dotglob позволяет шаблонам типа * включать файлы и каталоги, названия которых начинаются с точки (скрытые файлы).
ls *geek
shopt -s dotglob
ls *geekПосле включения в результат попадут и dot-файлы. Будьте внимательны: rm и mv с шаблонами могут затронуть скрытые файлы, если включён dotglob.
nocaseglob — игнорировать регистр при globbing
При включённой nocaseglob шаблоны не будут учитывать регистр символов в названиях файлов.
ls how*
shopt -s nocaseglob
ls how*Это полезно для поиска файлов в папках с непредсказуемым регистром.
Делать изменения постоянными
Все изменения через shopt действуют в текущей сессии. Чтобы применить опции при каждом запуске Bash, добавьте вызовы в ~/.bashrc.
Откройте файл в любимом редакторе, например в Gedit:
gedit .bashrcДобавьте строки, например:
# Личные настройки shopt
shopt -s autocd
shopt -s cdspell
shopt -s histverifyСохраните файл. Новые сессии Bash будут наследовать эти настройки.

Когда не стоит включать опцию: подводные камни
Важно понимать, что некоторые опции меняют фундаментальное поведение расширения имён и командной строки. Ниже — типовые ситуации, когда стоит воздержаться.
- dotglob: опасно для команд
rm *— с dotglob можно случайно удалить скрытые файлы. - nocaseglob: если ваш workflow полагается на разный регистр (например,
Makefileиmakefile), игнорирование регистра может скрыть ошибки. - xpg_echo: может осложнить переносимость скриптов между окружениями, где ожидается поведение стандартного
echo. - Совместимость: старые скрипты, рассчитанные на конкретное поведение Bash, могут начать работать иначе.
Всегда тестируйте изменения интерактивно на простых командах (ls, echo) перед использованием в скриптах.
Альтернативные подходы
Если вы не хотите глобально менять поведение оболочки, рассмотрите альтернативы:
- Локальные алиасы: определяйте
alias ll='ls -lah'без изменения shopt. - Обёртки функций: пишите функции, которые дают расширенные возможности только там, где нужно.
- Использование
set -o/shoptвместе: некоторые параметры можно контролировать черезset/set +o. - Пересмотреть использование другой оболочки (zsh): zsh имеет собственные расширенные настройки и плагины, которые решают похожие задачи.
Ментальные модели и эвристики
- «Сначала попробуй локально»: включите опцию в сессии и испробуйте её с безопасными командами.
- «Пассивная слежка»: используйте
shopt -sиshopt -uдля проверки текущего состояния, прежде чем менять что-либо. - «Минимальный набор»: для повседневной работы достаточно 3–5 удобных опций (autocd, cdspell, histverify, nocaseglob, dotglob при осторожном использовании).
Практическое руководство: как выбрать опции (мини-методология)
- Определите потребность: ускорение навигации, удобство редактирования истории, удобство globbing.
- Найдите подходящую опцию в
shoptи прочитайте описание в man. - Включите опцию в интерактивной сессии:
shopt -s. - Протестируйте — используйте
ls,cd,echoи ваши типичные команды. - Если всё ок, добавьте строку в
~/.bashrc. - Если нашли проблему, отключите опцию и проанализируйте последствия.
Чек-листы по ролям
Администратор:
- Проверьте совместимость с системными скриптами.
- Документируйте изменения в конфиге (
/etc/skel/.bashrcили пользовательском~/.bashrc). - Тестируйте изменения в тестовой учётной записи.
Разработчик:
- Включайте
histverifyиautocdдля быстрой интерактивной работы. - Не используйте
dotglobв скриптах без явной проверки.
Новый пользователь:
- Попробуйте
autocdиcdspellдля удобства. - Не меняйте глобально параметры, если не понимаете последствия.
Шпаргалка (cheat sheet)
- Показать все опции:
shopt- Показать только включённые / выключенные:
shopt -s
shopt -u- Включить опцию:
shopt -s - Выключить опцию:
shopt -u - Пример для dotglob:
shopt -s dotglob
ls *
shopt -u dotglobТестовые случаи и критерии приёмки
Для каждой опции полезно иметь короткие тесты:
- autocd: ввести имя существующего каталога без
cd— должен произойти переход. - cdspell: ввести опечатанное имя каталога — исправление и переход.
- dotglob: создать
.hiddenfileи обычныйfile, выполнитьls *с dotglob выключенным и включённым — проверить разницу. - nocaseglob: создать
HowToиhowto, выполнитьls how*с опцией вкл/выкл — проверить результат.
Критерии приёмки: поведение совпадает с ожидаемым для каждого теста без побочных эффектов в соседних сценариях.
Совместимость и миграция
- Verisoning: количество опций в
shoptи их имена могут отличаться между версиями Bash. Всегда проверяйте man-страницу на целевой машине. - Скрипты: не полагайтесь на интерактивные опции в скриптах. Если скрипту требуется особое поведение, явно установите нужные опции в начале скрипта.
#!/usr/bin/env bash
shopt -s nocaseglob
# дальнейший кодБезопасность и приватность
- Будьте осторожны с
dotglob: команды удаления и перемещения с глобами могут затронуть скрытые файлы. - Не включайте экспериментальные опции в системные скрипты, которые выполняются с повышенными привилегиями.
- Менее очевидные опции могут изменить вывод команд и, соответственно, логи. При настройке проверяйте, как изменится журналирование операций.
Примеры альтернатив и совместимость с zsh
Если вам нужны более гибкие возможности автодополнения и расширения имён, рассмотрите zsh с плагинами типа oh-my-zsh. Многие из задач, которые решаются shopt, в zsh имеют аналоги или более мощные механизмы.
Когда shopt не помогает
- Если проблема связана с правами доступа или SELinux — shopt не влияет.
- Для управления сетевыми аспектами, пакетами или демонами — нужны системные утилиты и сервисы.
Краткий глоссарий (1 строка)
- shopt — встроенная команда Bash для управления опциями поведения оболочки.
- globbing — расширение шаблонов (например,
*,?) в списки файлов. - dotfile — файл, имя которого начинается с
.и который обычно скрыт. - histverify — опция, заставляющая истории команд подставляться в строку, а не выполняться сразу.
Примеры конфигураций и шаблоны
Простой блок для ~/.bashrc:
# Настройки shopt
shopt -s autocd # автопереход по имени каталога
shopt -s cdspell # автокоррекция опечаток при cd
shopt -s histverify # проверка команды из истории перед выполнением
# shopt -s dotglob # включайте с осторожностьюЕсли хотите временно протестировать набор опций в новой сессии:
bash --noprofile --norc
# затем вручную включите нужные опции и протестируйтеКогда и как откатывать изменения
Если вы добавили строки в ~/.bashrc, удалите или закомментируйте их и откройте новую сессию. Для немедленного отката в текущей сессии выполните shopt -u .
Заключение
shopt даёт тонкий контроль над поведением Bash. Он полезен для ускорения повседневных задач и создания удобного интерактивного окружения. Начните с небольшого набора опций, протестируйте их и только после этого переносите изменения в ~/.bashrc.
Важно: проверяйте совместимость с вашими скриптами и осторожно используйте опции, влияющие на расширение имён (globbing).
Краткое резюме:
- shopt — встроенный инструмент настройки Bash.
- Опции действуют для текущей сессии; добавьте их в ~/.bashrc для постоянной настройки.
- Осторожно используйте опции, влияющие на скрытые файлы и регистр.
Спасибо, что прочитали. Попробуйте несколько опций в безопасной сессии и выберите те, что действительно ускоряют вашу работу.
Похожие материалы
Office Tab — вкладки в Microsoft Office
Отключить автозапуск эпизодов на Netflix
Проверить поддержку RCS на Android
Установка Arch Linux с GNOME — руководство
Проверить, заблокировали ли вас в Instagram