Delapan opsi Bash yang kurang dikenal

Beberapa opsi Bash sudah dikenal dan sering digunakan. Misalnya, banyak yang menulis di awal naskah

  set -o xtrace 

untuk debugging,

  set -o errexit 

untuk keluar karena kesalahan atau

  set -o errunset 

untuk keluar jika variabel yang dipanggil tidak disetel.

Tetapi ada banyak pilihan lain. Kadang-kadang mereka terlalu bingung dijelaskan dalam laki-laki, jadi saya telah mengumpulkan di sini beberapa yang paling berguna, dengan penjelasan.

Catatan: Mac mungkin memiliki versi bash yang lebih lama (3.x, bukan 4.x), di mana tidak semua opsi ini tersedia. Dalam hal ini, lihat di sini atau di sini .

set atau shopt ?


Ada dua cara untuk mengatur parameter bash: dari skrip atau dari baris perintah. Anda dapat menggunakan shopt set dan shopt . Keduanya mengubah perilaku shell, melakukan hal yang sama (dengan argumen yang berbeda), dan berbeda dalam asalnya . Parameter set diwariskan atau dipinjam dari parameter shell lainnya, sementara parameter shopt dibuat dalam bash.

Jika Anda ingin melihat opsi saat ini, jalankan:

 $ set -o $ shopt 

Untuk mengaktifkan opsi di set , digunakan sintaks panjang atau pendek:

 $ set -o errunset $ set -e 

Efeknya sama.

Untuk menonaktifkan opsi, Anda harus memberi nilai plus bukannya minus:

 $ set +e 

Untuk waktu yang lama saya tidak dapat mengingat sintaks ini, karena logika tampaknya salah (minus menyalakan opsi, dan plus mematikannya).

shopt menggunakan shopt (lebih logis) -s (set) dan -u (unset) untuk mengaktifkan dan menonaktifkan opsi:

 $ shopt -s cdspell # <= on $ shopt -u cdspell # <= off 

Perubahan Direktori


Ada beberapa opsi yang membantu Anda bekerja dengan direktori.

1. cdspell


Dengan pengaturan ini, bash akan mulai memahami kesalahan ketik dan akan memindahkan Anda ke folder yang namanya Anda ketikkan kesalahan.

 $ shopt -s cdspell $ mkdir abcdefg $ cd abcdeg abcdefg $ cd .. 

Saya menggunakan opsi ini selama bertahun-tahun, dan sangat jarang (mungkin setahun sekali) itu membuat keputusan yang sangat aneh. Tetapi di hari-hari lain, cdspell menghemat waktu, secara harfiah setiap hari.

2. autocd


Jika Anda tidak siap dengan inefisiensi dari input cd berulang, maka Anda dapat mengatur opsi ini untuk pindah ke folder X jika perintah X tidak ada.

 $ shopt -s autocd $ abcdefg $ cd .. 

Dalam kombinasi dengan pelengkapan otomatis, ini memungkinkan Anda untuk dengan cepat beralih ke folder:

 $ ./abc[TAB][RETURN] cd -- ./abcdefg 

Hanya saja, jangan beri rm -rf * folder rm -rf * (ya, omong-omong, ini mungkin).

3. direxpand


Ini adalah opsi keren yang memperluas variabel lingkungan 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 

Bersihkan pintu keluar


4. checkjobs


Opsi ini menghentikan jalan keluar dari sesi jika pekerjaan masih berjalan di latar belakang.

Alih-alih keluar, daftar tugas yang tidak lengkap ditampilkan. Jika Anda masih ingin keluar, masukkan exit lagi.

 $ 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   

Kemampuan Substitusi


5. globstar


Opsi ini memberi Anda kemampuan substitusi supernormal! Jika Anda memasukkan:

 $ shopt -s globstar $ ls ** 

maka shell akan menampilkan semua direktori dan subdirektori secara rekursif.

Dalam kombinasi dengan direxpand Anda dapat dengan cepat melihat semuanya di bawah dalam hierarki:

 $ shopt -s direxpand $ ls **[TAB][TAB] Display all 2033 possibilities? (y or n) 

6.extglob


Opsi ini mengaktifkan fungsi yang lebih sering dikaitkan dengan ekspresi reguler. Ini terkadang sangat berguna:

 $ shopt -s extglob $ touch afile bfile cfile $ ls afile bfile cfile $ ls ?(a*|b*) afile bfile $ ls !(a*|b*) cfile 

Di sini, pola ditempatkan dalam tanda kurung dan dipisahkan oleh batang vertikal. Berikut adalah operator yang tersedia:

  ?  = cocok dengan nol atau satu kemunculan pola yang diberikan
 !  = tampilkan semua yang tidak cocok dengan pola yang diberikan
 * = nol atau lebih banyak kejadian
 + = satu atau lebih kejadian
 @ = tepat satu kejadian 

Perlindungan kecelakaan


7. histverkan


Pada awalnya, bisa sedikit menakutkan menggunakan penggunaan perintah mulai cepat dari sejarah singkatan !! dan !$ .

Opsi histverify memungkinkan histverify untuk terlebih dahulu melihat bagaimana Bash menginterpretasikan perintah sebelum benar-benar dimulai:

 $ shopt -s histverify $ echo !$ # <=   Enter    $ echo histverify # <=     , histverify # <=    

8. Noclobber


Sekali lagi, untuk melindungi dari kecelakaan, yaitu dari menimpa file yang sudah ada dengan redirect operator ( > ). Ini bisa menjadi bencana jika Anda tidak memiliki cadangan.

Opsi set - melarang penulisan seperti itu. Jika perlu, Anda dapat memintas perlindungan menggunakan operator >| :

 $ touch afile $ set -C $ echo something > afile -bash: afile: cannot overwrite existing file $ echo something >| afile $ 

Source: https://habr.com/ru/post/id452522/


All Articles