Как узнать, включен ли extglob в текущей сессии bash?

9

У меня открыт терминал bash. Я хочу выяснить, включен ли параметр extglob в этом сеансе, прежде чем изменить его значение. Как я могу это сделать?

becko
источник
2
Обратите внимание, что нет необходимости проверять, если вам не интересно. Если хотите, просто запустите shopt -s extglobили, если хотите, запустите shopt -u extglob. Не имеет никакого значения, был ли он изначально или нет.
Тердон

Ответы:

15

Просто беги:

$ shopt extglob

Он вернет текущий статус:

$ shopt extglob 
extglob         on
$ shopt -u extglob 
$ shopt extglob 
extglob         off

Чтобы показать все параметры, просто запустите:

$ shopt
Джефф Шаллер
источник
Этот также может быть использован для сценариев, его возвращаемый статус также указывает на установленный или не установленный параметр, но стандартное сообщение будет сбиваться.
cuonglm
11

Используйте shopt -q :

shopt -q extglob && echo enable || echo disable

-qопция сделать shoptсброс вывода и вернуть статус, чтобы указать, что опции установлены или не установлены.

Обратите внимание, что shoptтолько параметры отчетов, которые могут отображаться в BASHOPTSпеременной, эти параметры недопустимы для setвстроенной команды.

Чтобы проверить параметры, которые действительны setили могут отображаться SHELLOPTS, используйте shopt -qo:

$ bash --posix -c 'shopt -qo posix && echo enable || echo disable'
enable
cuonglm
источник
2
Почему не просто shopt extglob?
Тердон
1
Потому что я не хочу, чтобы вывод
испортил
Что вы имеете в виду? Насколько я могу судить, OP хочет проверить, установлена ​​эта опция или нет. Они упоминают, что это в терминале, поэтому я сомневаюсь, что это часть сценария. И вообще, какая разница? Оба shopt extglobи ваш подход напишет в stdout. Вы думаете о shopt -q extglob && shopt -u extglob || shopt -s extglob?
Terdon
@terdon: Ну, мой подход, только пишите в stdout, если я хочу . Общий подход есть shopt -q extglob && : Code when enable || : Code when disable.
cuonglm
3
Я могу представить себе написание сценария, который попытался бы сохранить существующие настройки пользователя, но мог бы содержать критический фрагмент кода, который сломается, если не будет задан конкретный путь. Это предлагает метод для тихого определения текущего состояния, его сохранения и восстановления как можно скорее после выполнения важных операций, которые требуют потенциально другого состояния.
Монти Хардер
5

В bash есть два списка опций. Один за shoptи один за set.

Опция extglobпринадлежит shoptсписку.
Его значение может быть напечатано с использованием либо shopt extglobили shopt -p extglob.

Опция вроде nounsetпринадлежит к setсписку.
Его значение может быть напечатано с помощью shopt -op nounsetили shopt -o nounset.

Отметьте один вариант.

Чтобы напечатать определенный параметр (не изменяя его) для покупок, используйте shopt -p name:

$ shopt -p xpg_echo
shopt -u xpg_echo

И для set, используйте: shopt -po name(да, вы можете использовать shopt -opдля setсписка).

$  shopt -po xtrace
set +o xtrace

Список вариантов.

Чтобы перечислить все варианты из магазина, используйте shopt(или многоразовые shopt -p).
Также shopt -sили shopt -uможет быть использован.

Список всех опций можно setнайти с помощью set -o(related:) set +o.
Или: shopt -oэквивалентно set -oи shopt -opесть set +o.

Руководство

От LESS=+/'^ *shopt \[' man bash:

Без параметров или с параметром -p отображается список всех настраиваемых параметров. Если -s или -u используется без аргументов optname, отображение ограничивается теми параметрами, которые установлены или не установлены соответственно.

От LESS=+/'^ *set \[' man bash:

Если -o указан без имени опции, будут напечатаны значения текущих опций. Если + o указан без имени опции, серия стандартных команд для воссоздания текущих настроек опции отображается на стандартном выводе.

Примеры

$ set -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          off

А также

$  shopt -sp
shopt -s checkwinsize
shopt -s cmdhist
shopt -s expand_aliases
shopt -s extglob
shopt -s extquote
shopt -s force_fignore
shopt -s histappend
shopt -s histverify
shopt -s interactive_comments
shopt -s progcomp
shopt -s promptvars
shopt -s sourcepath

Стоит упомянуть о том, shopt -opкакие на самом деле перечислены setварианты:

$ shopt -op
set +o allexport
set -o braceexpand
set -o emacs
set +o errexit
set +o errtrace
set +o functrace
set -o hashall
set -o histexpand
set -o history
set +o ignoreeof
set -o interactive-comments
set +o keyword
set -o monitor
set +o noclobber
set +o noexec
set +o noglob
set +o nolog
set +o notify
set +o nounset
set +o onecmd
set +o physical
set +o pipefail
set +o posix
set +o privileged
set +o verbose
set +o vi
set +o xtrace

источник