Bagaimana cara mengetahui apakah extglob diaktifkan di sesi bash saat ini?


9

Saya memiliki terminal bash terbuka. Saya ingin mengetahui apakah opsi extglob diaktifkan atau dinonaktifkan di sesi ini, sebelum saya mengubah nilainya. Bagaimana saya bisa melakukan ini?


2
Perhatikan bahwa tidak perlu memeriksa kecuali Anda penasaran. Jika Anda menginginkannya aktif, jalankan saja shopt -s extglobatau, jika Anda menginginkannya, jalankan shopt -u extglob. Tidak ada bedanya sama sekali apakah itu pada awalnya atau tidak.
terdon

Jawaban:


15

Lari saja:

$ shopt extglob

Ini akan mengembalikan status saat ini:

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

Untuk menampilkan semua opsi, jalankan:

$ shopt

Yang ini juga dapat digunakan untuk skrip, status kembalinya juga menunjukkan opsi disetel atau tidak disetel, tetapi pesannya akan mengacaukan standar.
cuonglm

11

Gunakan shopt -q :

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

-qopsi buat shoptbuang output, dan kembalikan status untuk menunjukkan bahwa opsi disetel atau tidak disetel.

Perhatikan bahwa shopthanya opsi laporan yang dapat muncul dalam BASHOPTSvariabel, opsi tersebut tidak valid untuk setperintah builtin.

Untuk memeriksa opsi yang valid setatau dapat ditampilkan SHELLOPTS, gunakan shopt -qo:

$ bash --posix -c 'shopt -qo posix && echo enable || echo disable'
enable

2
Kenapa tidak adil shopt extglob?
terdon

1
Karena saya tidak ingin output mengacaukan standar saya :)
cuonglm

Apa maksudmu? Sejauh yang saya tahu, OP ingin memeriksa apakah opsi disetel atau tidak. Mereka menyebutkan bahwa ini ada di terminal, jadi saya ragu itu bagian dari skrip. Lagi pula, apa bedanya? Keduanya shopt extglobdan pendekatan Anda akan menulis ke stdout. Apakah Anda memikirkannya shopt -q extglob && shopt -u extglob || shopt -s extglob?
terdon

@terdon: Yah, pendekatan saya hanya menulis ke stdout jika saya mau . Pendekatan umum adalah shopt -q extglob && : Code when enable || : Code when disable.
cuonglm

3
Saya bisa membayangkan menulis skrip yang akan berusaha untuk melestarikan pengaturan yang ada pengguna, tetapi mungkin memiliki sedikit kode kritis yang akan rusak jika tidak menetapkan cara tertentu. Ini menyarankan metode untuk secara diam-diam menentukan kondisi saat ini, menyimpannya, dan mengembalikannya secepat mungkin setelah melakukan operasi penting yang memerlukan kondisi yang berpotensi berbeda.
Monty Harder

5

Ada dua daftar opsi di bash. Satu untuk shoptdan satu untuk set.

Opsi tersebut extglobtermasuk dalam shoptdaftar.
Nilainya dapat dicetak dengan menggunakan salah satu shopt extglobatau shopt -p extglob.

Opsi suka nounsettermasuk dalam setdaftar.
Nilainya dapat dicetak dengan menggunakan shopt -op nounsetatau shopt -o nounset.

Periksa satu opsi.

Untuk mencetak opsi tertentu (tanpa mengubahnya) untuk shopt, gunakan shopt -p name:

$ shopt -p xpg_echo
shopt -u xpg_echo

Dan untuk set, gunakan: shopt -po name(ya, Anda dapat menggunakan shopt -opuntuk setdaftar).

$  shopt -po xtrace
set +o xtrace

Opsi daftar.

Untuk daftar semua opsi dari shopt, gunakan shopt(atau dapat digunakan kembali shopt -p).
Juga shopt -satau shopt -ubisa digunakan.

Cara membuat daftar semua opsi setadalah dengan set -o(terkait:) set +o.
Atau: shopt -osama dengan set -odan shopt -opsama dengan set +o.

Manual

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

Tanpa opsi, atau dengan opsi -p, daftar semua opsi yang dapat diatur ditampilkan, Jika salah satu -s atau -u digunakan tanpa argumen optname, tampilan dibatasi untuk masing-masing opsi yang ditetapkan atau tidak disetel.

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

Jika -o diberikan tanpa nama-opsi, nilai-nilai dari opsi saat ini dicetak. Jika + o diberikan tanpa nama-opsi, serangkaian perintah yang ditetapkan untuk menciptakan kembali pengaturan opsi saat ini ditampilkan pada output standar.

Contohnya

$ 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

Dan

$  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

Perlu disebutkan tentang shopt -opyang sebenarnya mencantumkan setopsi:

$ 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.