Beberapa pilihan Bash terkenal dan sering digunakan. Sebagai contoh, ramai orang menulis pada permulaan skrip
set -o xtrace
untuk debugging,
tetapkan -o errexit
untuk keluar secara tidak sengaja atau
set -o errunset
untuk keluar jika pembolehubah yang dipanggil tidak ditetapkan.
Tetapi terdapat banyak pilihan lain. Kadang-kadang mereka digambarkan terlalu mengelirukan dalam manas, jadi saya telah mengumpulkan beberapa yang paling berguna di sini, dengan penjelasan.
Nota: Mac mungkin mempunyai versi bash yang lebih lama (3.x dan bukannya 4.x) yang tidak semua pilihan ini tersedia. Dalam kes ini, lihat
set
atau shopt
?
Terdapat dua cara untuk menetapkan pilihan bash: daripada skrip atau daripada baris arahan. Anda boleh menggunakan arahan terbina dalam set
ΠΈ shopt
. Kedua-duanya mengubah tingkah laku shell, melakukan perkara yang sama (dengan argumen yang berbeza), tetapi berbeza dalam mereka set
diwarisi atau dipinjam daripada parameter cangkerang lain, manakala parameter shopt
dicipta dalam bash.
Jika anda ingin melihat pilihan semasa, jalankan:
$ set -o
$ shopt
Untuk mengaktifkan pilihan dalam set
Sintaks panjang atau pendek digunakan:
$ set -o errunset
$ set -e
Kesannya adalah sama.
Untuk melumpuhkan pilihan, anda perlu meletakkan tambah dan bukannya tolak:
$ set +e
Untuk masa yang lama saya tidak dapat mengingati sintaks ini kerana logiknya kelihatan salah (tanda tolak membolehkan pilihan, dan tanda tambah menyahdayakannya).
Π shopt
Bendera (lebih logik) digunakan untuk mendayakan dan melumpuhkan pilihan -s
(set) dan -u
(tidak ditetapkan):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Menukar direktori
Terdapat beberapa pilihan yang membantu anda bekerja dengan direktori.
1.cdspell
Dengan tetapan ini, bash akan mula memahami kesilapan menaip dan akan membawa anda ke folder yang namanya anda salah eja.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Saya telah menggunakan pilihan ini selama bertahun-tahun dan sangat jarang (mungkin setahun sekali) ia membuat keputusan yang sangat pelik. Tetapi pada hari-hari lain cdspell
menjimatkan masa, secara literal setiap hari.
2. autocd
Jika anda tidak bersedia menerima ketidakcekapan berbilang penyertaan cd
, maka anda boleh menetapkan pilihan ini untuk beralih ke folder X jika arahan X tidak wujud.
$ shopt -s autocd
$ abcdefg
$ cd ..
Digabungkan dengan autolengkap, ini membolehkan anda melompat antara folder dengan cepat:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Cuma jangan namakan folder itu rm -rf *
(ya, dengan cara ini, ini mungkin).
3.diperkembangkan
Ini ialah pilihan hebat yang mengembangkan pembolehubah persekitaran dengan menekan Tab:
$ shopt -s direxpand
$ ./[TAB] # Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°...
$ /full/path/to/current_working_folder
$ ~/[TAB] # Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°...
$ /full/path/to/home/folder
$ $HOME/[TAB] # Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°...
$ /full/path/to/home/folder
keluaran bersih
4. kerja semak
Pilihan ini berhenti log keluar daripada sesi jika masih terdapat kerja yang berjalan di latar belakang.
Daripada keluar, senarai tugasan yang belum selesai dipaparkan. Jika anda masih mahu keluar, maka masukkan semula exit
.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄Π»Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ
$ sleep 999 &
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ echo $$
68125 # <= ID ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄Π»Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΡΠΎΡ ΠΆΠ΅
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ exit
$ echo $$
$ 59316 # <= Π½Π° ΡΡΠΎΡ ΡΠ°Π· ID ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ
Kuasa besar penggantian
5.globstar
Pilihan ini memberi anda kuasa besar penggantian! Jika anda memasukkan:
$ shopt -s globstar
$ ls **
maka shell akan menunjukkan semua direktori dan subdirektori secara rekursif.
Dalam kombinasi dengan direxpand
Anda boleh melihat semua yang lebih rendah dalam hierarki dengan cepat:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Pilihan ini membolehkan ciri yang lebih biasa dikaitkan dengan ungkapan biasa. Kadang-kadang ini sangat berguna:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Di sini corak diletakkan dalam kurungan dan dipisahkan oleh bar menegak. Berikut ialah operator yang tersedia:
? = sepadan dengan sifar atau satu kejadian bagi corak yang diberikan ! = tunjukkan semua yang tidak sepadan dengan corak yang diberikan * = sifar atau lebih kejadian + = satu atau lebih kejadian @ = tepat satu kejadian
Perlindungan kemalangan
7. histverify
Ia boleh menjadi sedikit menakutkan pada mulanya untuk menggunakan arahan pelancaran pantas daripada sejarah singkatan !!
ΠΈ !$
.
Pilihan histverify
membolehkan anda melihat dahulu bagaimana Bash mentafsir arahan sebelum ia benar-benar berjalan:
$ shopt -s histverify
$ echo !$ # <= ΠΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Enter ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ
$ echo histverify # <= ΠΠ½Π° ΡΠ½Π°ΡΠ°Π»Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅,
histverify # <= Π° ΠΏΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ
8. Noclobber
Sekali lagi, untuk melindungi daripada kemalangan, iaitu daripada menulis ganti fail yang sudah wujud dengan pengendali ubah hala (>
). Ini boleh menjadi bencana jika anda tidak mempunyai sandaran.
Pilihan set -Π‘
melarang penulisan ganti tersebut. Jika perlu, anda boleh memintas perlindungan menggunakan operator >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Sumber: www.habr.com