Tujuh pembolehubah Bash yang tidak dijangka

Meneruskan siri nota tentang kurang dikenali fungsi bash, saya akan menunjukkan kepada anda tujuh pembolehubah yang mungkin anda tidak tahu.

1) PROMPT_COMMAND

Anda mungkin sudah tahu cara memanipulasi gesaan untuk menunjukkan pelbagai maklumat berguna, tetapi tidak semua orang tahu bahawa anda boleh menjalankan arahan shell setiap kali gesaan ditunjukkan.

Malah, banyak manipulator gesaan yang kompleks menggunakan pembolehubah ini untuk melaksanakan arahan untuk mengumpul maklumat yang dipaparkan dalam gesaan.

Cuba jalankan ini dalam shell baharu dan lihat apa yang berlaku pada sesi:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

Jika anda berlari history dalam konsol, anda akan menerima senarai arahan yang telah dilaksanakan sebelum ini di bawah akaun anda.

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

Setelah pembolehubah ini ditetapkan, entri baharu merekodkan masa bersama-sama dengan arahan, jadi output akan kelihatan seperti ini:

1871 Saya menjalankan ini di: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Saya menjalankan ini di: 01/05/19 13:38:19 curl bbc.co.uk 1873 Saya menjalankan ini di : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Saya menjalankan ini di: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Saya menjalankan ini di: 01 /05/19 13:39:25 sudo su -

Pemformatan sepadan dengan aksara daripada man date.

3) CDPATH

Untuk menjimatkan masa pada baris arahan, anda boleh menggunakan pembolehubah ini untuk menukar direktori semudah anda mengeluarkan arahan.

sebagai PATH, pembolehubah CDPATH ialah senarai laluan yang dipisahkan bertindih. Apabila anda menjalankan arahan cd dengan laluan relatif (iaitu tiada garis miring utama), secara lalai shell kelihatan dalam folder tempatan anda untuk nama yang sepadan. CDPATH akan mencari dalam laluan yang anda berikan untuk direktori yang anda ingin pergi.

Jika anda memasang CDPATH dengan cara ini:

$ CDPATH=/:/lib

dan kemudian masukkan:

$ cd /home
$ cd tmp

maka anda akan sentiasa berakhir /tmp tidak kira di mana anda berada.

Walau bagaimanapun, berhati-hati, kerana jika anda tidak menentukan yang tempatan dalam senarai (.) folder, maka anda tidak akan dapat mencipta sebarang folder lain tmp dan pergi ke sana seperti biasa:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

Aduh!

Ini serupa dengan kekeliruan yang saya rasakan apabila saya menyedari bahawa folder tempatan tidak disertakan dalam pembolehubah yang lebih biasa PATH... tetapi anda perlu melakukannya dalam pembolehubah PATH anda kerana anda mungkin terpedaya untuk menjalankan arahan palsu daripada beberapa kod yang dimuat turun.

Milik saya ditetapkan oleh titik permulaan:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

Pernahkah anda terfikir, menaip exit adakah ia akan membawa anda keluar dari shell bash semasa anda ke shell "ibu bapa" yang lain, atau adakah ia hanya akan menutup tetingkap konsol sepenuhnya?

Pembolehubah ini menjejaki sejauh mana anda bersarang dalam shell bash. Jika anda membuat terminal baharu, ia ditetapkan kepada 1:

$ echo $SHLVL
1

Kemudian, jika anda memulakan proses shell yang lain, bilangannya meningkat:

$ bash
$ echo $SHLVL
2

Ini boleh menjadi sangat berguna dalam skrip yang anda tidak pasti sama ada untuk keluar atau tidak, atau menjejaki tempat anda bersarang.

5) LINENO

Pembolehubah juga berguna untuk menganalisis keadaan semasa dan penyahpepijatan LINENO, yang melaporkan bilangan arahan yang dilaksanakan dalam sesi setakat ini:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

Ini paling kerap digunakan semasa menyahpepijat skrip. Memasukkan baris seperti echo DEBUG:$LINENO, anda boleh menentukan dengan cepat di mana anda berada dalam skrip (atau tidak).

6) REPLY

Jika, seperti saya, anda biasanya menulis kod seperti ini:

$ read input
echo do something with $input

Ia mungkin mengejutkan bahawa anda tidak perlu risau tentang membuat pembolehubah sama sekali:

$ read
echo do something with $REPLY

Ini melakukan perkara yang sama.

7) TMOUT

Untuk mengelak daripada berada di pelayan pengeluaran terlalu lama atas sebab keselamatan atau menjalankan sesuatu yang berbahaya secara tidak sengaja di terminal yang salah, menetapkan pembolehubah ini bertindak sebagai perlindungan.

Jika tiada apa-apa yang dimasukkan untuk beberapa saat yang ditetapkan, shell akan keluar.

Iaitu, ini adalah alternatif sleep 1 && exit:

$ TMOUT=1

Sumber: www.habr.com

Tambah komen