Lapan Pilihan Bash Yang Kurang Diketahui

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 di sini atau di sini.

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 asal usul... Pilihan 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

Tambah komen