Гид по технологиям

Управление поведением Bash с помощью shopt

8 min read Linux Обновлено 19 Dec 2025
Настройка Bash с помощью shopt
Настройка 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 под свои привычки и задачи.

Терминал Linux с иллюстрацией конфигурации Bash

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

Вывод shopt | column в окне терминала

Факт-бокс

  • Количество опций: 53 (в большинстве современных сборок Bash).
  • Доступ: встроено в Bash, не требует установки.
  • Действие: глобальное для текущей сессии оболочки.

Поиск shopt в руководстве Linux

Раздел с shopt находится в разделе Bash man-страницы. Bash-документация объёмна (несколько тысяч строк), поэтому удобнее искать по слову:

man bash
/assoc_expand_once

Раздел Bash в man с поиском

После поиска ман покажет начало секции с описанием опций shopt.

Man-страница Bash, показывающая раздел с 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 ../Picttures

Bash попытается исправить ошибки и выполнить переход в нужный каталог. Это удобно, но не заменяет внимательную работу с путями в скриптах.

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 будут наследовать эти настройки.

Редактор gedit с открытым .bashrc и выделенными shopt

Когда не стоит включать опцию: подводные камни

Важно понимать, что некоторые опции меняют фундаментальное поведение расширения имён и командной строки. Ниже — типовые ситуации, когда стоит воздержаться.

  • 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 при осторожном использовании).

Практическое руководство: как выбрать опции (мини-методология)

  1. Определите потребность: ускорение навигации, удобство редактирования истории, удобство globbing.
  2. Найдите подходящую опцию в shopt и прочитайте описание в man.
  3. Включите опцию в интерактивной сессии: shopt -s .
  4. Протестируйте — используйте ls, cd, echo и ваши типичные команды.
  5. Если всё ок, добавьте строку в ~/.bashrc.
  6. Если нашли проблему, отключите опцию и проанализируйте последствия.

Чек-листы по ролям

Администратор:

  • Проверьте совместимость с системными скриптами.
  • Документируйте изменения в конфиге (/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 для постоянной настройки.
  • Осторожно используйте опции, влияющие на скрытые файлы и регистр.

Спасибо, что прочитали. Попробуйте несколько опций в безопасной сессии и выберите те, что действительно ускоряют вашу работу.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Office Tab — вкладки в Microsoft Office
Обзор ПО

Office Tab — вкладки в Microsoft Office

Отключить автозапуск эпизодов на Netflix
Руководство

Отключить автозапуск эпизодов на Netflix

Проверить поддержку RCS на Android
Мобильные приложения

Проверить поддержку RCS на Android

Установка Arch Linux с GNOME — руководство
Linux

Установка Arch Linux с GNOME — руководство

Проверить, заблокировали ли вас в Instagram
Социальные сети

Проверить, заблокировали ли вас в Instagram

Выровнять маркированный текст в PowerPoint
Обучение

Выровнять маркированный текст в PowerPoint