Як дізнатися, чи ввімкнено extglob у поточному сеансі bash?


10

У мене відкритий термінал bash. Я хочу дізнатися, включена чи відключена опція extglob в цьому сеансі, перш ніж змінити її значення. Як я можу це зробити?


2
Зауважте, що немає необхідності перевіряти, якщо вам не цікаво. Якщо ви хочете, просто запустіть shopt -s extglobабо, якщо ви хочете, вимкніть shopt -u extglob. Це не має ніякої різниці в тому, було воно спочатку чи ні.
тердон

Відповіді:


16

Просто запустіть:

$ shopt extglob

Він поверне поточний статус:

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

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

$ shopt

Цей також може бути використаний для створення сценаріїв, його стан повернення також вказує на встановлений варіант або встановлений параметр, але повідомлення буде забруднено.
cuonglm

12

Використовувати 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

2
Чому б не просто shopt extglob?
тердон

1
Тому що я не хочу, щоб вихід
зіпсував

Що ви маєте на увазі? Наскільки я можу сказати, ОП хоче перевірити, встановлений варіант чи ні. Вони згадують, що це в терміналі, тому я сумніваюся, що це частина сценарію. І, в будь-якому випадку, яка різниця? І shopt extglobваш, і ваш підхід буде писати в stdout. Ви думаєте shopt -q extglob && shopt -u extglob || shopt -s extglob?
тердон

@terdon: Ну, мій підхід пишу в stdout тільки якщо я хочу . Загальний підхід є shopt -q extglob && : Code when enable || : Code when disable.
cuonglm

3
Я можу уявити собі написання сценарію, який би намагався зберегти існуючі налаштування користувача, але може мати критичний біт коду, який буде зламаний, якщо він не визначений певним чином. Це пропонує метод мовчки визначити поточний стан, зберегти його та відновити якнайшвидше після виконання найважливіших операцій, які потребують різного стану.
Monty Harder

6

У 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.