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?
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
Yang ini juga dapat digunakan untuk skrip, status kembalinya juga menunjukkan opsi disetel atau tidak disetel, tetapi pesannya akan mengacaukan standar.
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
shopt -s extglob
atau, jika Anda menginginkannya, jalankanshopt -u extglob
. Tidak ada bedanya sama sekali apakah itu pada awalnya atau tidak.Jawaban:
Lari saja:
Ini akan mengembalikan status saat ini:
Untuk menampilkan semua opsi, jalankan:
sumber
Gunakan shopt -q :
-q
opsi buatshopt
buang output, dan kembalikan status untuk menunjukkan bahwa opsi disetel atau tidak disetel.Perhatikan bahwa
shopt
hanya opsi laporan yang dapat muncul dalamBASHOPTS
variabel, opsi tersebut tidak valid untukset
perintah builtin.Untuk memeriksa opsi yang valid
set
atau dapat ditampilkanSHELLOPTS
, gunakanshopt -qo
:sumber
shopt extglob
?shopt extglob
dan pendekatan Anda akan menulis ke stdout. Apakah Anda memikirkannyashopt -q extglob && shopt -u extglob || shopt -s extglob
?shopt -q extglob && : Code when enable || : Code when disable
.Ada dua daftar opsi di bash. Satu untuk
shopt
dan satu untukset
.Opsi tersebut
extglob
termasuk dalamshopt
daftar.Nilainya dapat dicetak dengan menggunakan salah satu
shopt extglob
ataushopt -p extglob
.Opsi suka
nounset
termasuk dalamset
daftar.Nilainya dapat dicetak dengan menggunakan
shopt -op nounset
ataushopt -o nounset
.Periksa satu opsi.
Untuk mencetak opsi tertentu (tanpa mengubahnya) untuk shopt, gunakan
shopt -p name
:Dan untuk
set
, gunakan:shopt -po name
(ya, Anda dapat menggunakanshopt -op
untukset
daftar).Opsi daftar.
Untuk daftar semua opsi dari shopt, gunakan
shopt
(atau dapat digunakan kembalishopt -p
).Juga
shopt -s
ataushopt -u
bisa digunakan.Cara membuat daftar semua opsi
set
adalah denganset -o
(terkait:)set +o
.Atau:
shopt -o
sama denganset -o
danshopt -op
sama denganset +o
.Manual
Dari
LESS=+/'^ *shopt \[' man bash
:Dari
LESS=+/'^ *set \[' man bash
:Contohnya
Dan
Perlu disebutkan tentang
shopt -op
yang sebenarnya mencantumkanset
opsi:sumber