====== shopt ======

Опции могут быть включены командой '''shopt''' <tt>-s</tt> ''имя_опции''. И выключены командой '''shopt''' <tt>-u</tt> ''имя_опции''. По-умолчанию опции выключены, если не указано обратное.

**shopt** — встроенная команда оболочки, управляет опциями. Изменяет значение внутренних конфигурационных параметров оболочки. 

==== Синтаксис ====

**shopt** -pqsu -o ''имя_опции...''

=== Описание ===

Некоторые опции могут устанавливаться встроенной командой **set**. 

  * -o - Restrict the values of <OPTNAME...> to only those also known by the set builtin
  * -p - Печатает команду shopt с параметрами, которые выставят оболочку в такое положение, как сейчас. 
  * -q - Тихий режим. Выстваляет код возврата в 0 если опция выставлена. Если опций было задано несколько то вернет 0 (TRUE) если все опции выставлены. Иначе вернет 1  (FALSE). 
  * -s - Выставляет (разрешает) опцию или список опций.
  * -u - Отключает опцию или список. shopt с ключем -s или -u  без имени опции выведет список опций которые только включены или выключены.

==== Код завершения ====

Когда идет установка опций - код возврата 0 (TRUE) если смена всех опций прошла успешно. 
Когда выдается список опций - код возврата 0 (TRUE) если все опции выставлены. Иначе 0 (FALSE)

=== Список опций оболочки bash ===

=== cdable_vars ===
Если опция установлена, то каждый (отдельный) аргумент команды cd, который не является каталогом, будет рассматриваться как имя переменной. Если путь с именем переменнной обнаружен, он будет выведен на экран, и будет выполнена команда cd. 
 [username@localhost tmp]$ shopt -s cdable_vars
 [username@localhost tmp]$ cd HOME
 /home/username
 [username@localhost ~]$ shopt -u cdable_vars 
 [username@localhost ~]$ cd HOME
 bash: cd: HOME: No such file or directory

=== cdspell ===
Незначительные ошибки в написании каталога команды cd будут исправляться: поменянные местами соседние символы, пропущенные, удвоенные символы. Если исправленный путь обнаружен - он будет выведен на экран, и будет выполнена команда cd. Работает только в интерактивном режиме.

=== checkhash ===
Если опция выставлена, то перед тем как выполнять команду - проверяется её наличие в hash-таблице. Если она там не найдена, тогда отрабатывается полноценный поиск по $PATH. 

=== checkjobs ===
''с версии 4.0''
Если опция выставлена, то перед тем как выйти из оболочки, проверяет и докладывает о наличии работающих job-ов. См опцию huponexit.

=== checkwinsize ===
Если опция выставлена, то после каждой команды оболочка проверяет размер экрана терминала, и обновляет переменные LINES и COLUMNS.
По-умолчанию выключена, но в современных дистрибутивах, в интерактивном графическом режиме по профилям выставляется.

=== cmdhist ===
Если опция выставлена, bash старается все строки многострочной команды рассматривать как одну для сохранения в истории. Это дает возможность просто редактировать многострочные команды. Смотрте также утилиту rlwrap.

=== compat** ===
''в зависимости от версии: compat31; compat32; compat40; compat41''<br />
Опции работы новой версии bash в режиме совместимости более старшей версии.

=== dirspell ===
''c версии 4.0''<br />
Если опция выставлена - bash будет пытаться исправлять имена каталогов.

=== dotglob ===
Если опция выставлена - bash будет включать в список файлов файлы, начинающиеся с точки ( .bashrc ) в результат glob-а. 

=== execfail ===
Если опция выставлена - неинтерактивная оболочка не прервет свою работу, если вызов exec не сможет выполнить файл, указанный в качестве аргумента. Интерактивной оболочке нет смысла выставлять/убирать эту опцию: она не завершает работу если exec не справляется с запуском аргумента.

=== expand_aliases ===
Если опция выставлена - alias-ы будут развернуты (см [[bash#Командная подстановка|Подстановки]]). По-умолчанию для интерактивных опция включена, для не-интерактивных выключена.

=== extdebug ===
Используется для debug

=== extglob ===
Если опция выставлена - будут использоваться расширенные glob-ы (см [[bash#Расширенные подстановки|Подстановки]]). По-умолчанию для интерактивных 

=== extquote ===
???

=== failglob ===
Если опция выставлена - при использовании glob-а, в который не попадает ни одного файла, будет выведено сообщение об ошибке.
 [username@localhost ~]$ mkdir /tmp/foo && cd /tmp/foo
  
 [username@localhost foo]$ shopt -u failglob
 [username@localhost foo]$ ls * 
 ls: cannot access *: No such file or directory
 
 [username@localhost foo]$ shopt -s failglob
 [username@localhost foo]$ ls * 
 bash: no match: *

При взведении опции до выполнения команды ls дело не дошло.

=== forceignore ===
Если опция выставлена - суффиксы определенные в переменной FIGNORE будут игнорироваться при работе bash completion, даже если они подходят по completion. Эта опция включена по-умолчанию.

=== globstar ===
**ion, даже ес**
Если опция выставлена - glob - становится рекурсивным.

=== gnu_errfmt ===
Если опция выставлена - ошибки будут выдаваться в стандартном формате GNU. 

=== histappend ===
Если опция выставлена - история команд будет добавлена в файл $HISTFILE, в противном случае файл будет перезаписан опция по-умолчанию отключена, но в современных дистрибутивах опция взводится в конфиг-файлах инициализации оболочки. 

=== histreedit ===
Если опция выставлена - то для редактирования команд из истории будет использован readline, чтобы перередактировать неверную команду. 

=== histverify ===
Если опция выставлена - разрешаетя пресмотреть результат подстановки команды из истории в буфер обмена вместо исполнения.

==== hostcomlete ====
Если опция выставлена - bash completion будет также дополнять имена хостов из /etc/hosts. Включено по-умолчанию.

=== huponexit ===
Если опция выставлена - при выходе из интерактивной оболочки bash отсылает job-ам сигнал hungup (SIGHUP). Защитить job-ы можно запуская их с honup.

=== lithost ===
Если эта опция и cmdhist выставлены - то многострочные команды записываются с символом перевода строки. Иначе используется точка с запятой.

=== login_shell ===
Эта опция выставляется если данная оболочка является оболочкой логина. Выставляется автоматически, изменить нельзя.

=== mailwarn ===
Если опция выставлена и файл почты просматривался вне bash (bash ведет свой счетчик проверки почты) то bash покажет сообщение "The mail in mailfile has been read". 

=== no_empty_cmd_completion ===
Если опция выставлена и используется readline, bash не будет пытаться искать программы из PATH в пустой строки ввода по <tab><tab>.

=== nocaseglob ===
**используется**2
Если опция выставлена - bash разворачивая glob-ы, будет регистронезависимым по отношению к объектам файловой системы.

=== nocasematch ===
**я выставлена**
Если опция выставлена - bash будет регистронезависимым в вычислениях условий [[ ]] и case.  

=== nullglob ===
Если опция выставлена - bash разрешает glob-ы в которых нет ни одного файла. При этом есть связь с опцией [[shopt#failglob|failglob]]:<br />
failglob выставлена + nullglob  выставлена = bash перехватит "неправильный" glob и не выполнит команду.<br />
failglob не выставлена + nullglob  выставлена = команде будет передана строка нулевой длины.<br />
failglob выставлена + nullglob не выставлена = bash перехватит "неправильный" glob и не выполнит команду.<br />
failglob не выставлена + nullglob не выставлена = команде будет передан "неправильный" glob.<br />

=== progcomp ===
Если опция выставлена - разрешены программируемые команды дополнений (bash completion). По-умолчанию выставлено.

=== promptvars ===
Если опция выставлена - строка приглашения производит подстановку команд, арифметических выражений, убирает кавычки, специальные символы. эта опция включена по-умолчанию.

=== restricted_shell ===
Если опция выставляется если оболочка работает в restricted shell -режиме.  Выставляется автоматически, нельзя изменить.

=== shift_verbose ===
Если опция выставлена - встроенная команда shift будет выдавать сообщение об ошибке "позиционные параметры кончились".

==== sourcepath ====
Если опция выставлена - встроенные команды используют переменную PATH для поиска аргументов (в т.ч. exec). В интерактивном режиме выставлено по-умолчанию.

=== xpg_echo ===
Если опция выставлена - встроенная команда echo раскрывает backslash esc-последовательности по-умолчанию. (POSIX, SUS, XPG).
