GNU/Linux >> Belajar Linux >  >> Linux

Bash Shell:Kendalikan PS1, PS2, PS3, PS4, dan PROMPT_COMMAND

Interaksi Anda dengan Linux Bash shell akan menjadi sangat menyenangkan, jika Anda menggunakan PS1, PS2, PS3, PS4, dan PROMPT_COMMAND secara efektif. PS adalah singkatan dari pernyataan cepat. Artikel ini akan memberi Anda lompatan awal pada variabel lingkungan command prompt Linux menggunakan contoh sederhana.

1. PS1 – Perintah interaksi default

Prompt interaktif default di Linux Anda dapat dimodifikasi seperti yang ditunjukkan di bawah ini menjadi sesuatu yang berguna dan informatif. Dalam contoh berikut, PS1 default adalah “\s-\v\$”, yang menampilkan nama shell dan nomor versi. Mari kita ubah perilaku default ini untuk menampilkan nama pengguna, nama host, dan nama direktori kerja saat ini seperti yang ditunjukkan di bawah ini.

-bash-3.2$  export PS1="\u@\h \w> "

ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
[Note: Prompt changed to "username@hostname current-dir>" format] 

Kode PS1 berikut digunakan dalam contoh ini:

  • \u – Nama pengguna
  • \h – Nama Inang
  • \w – Nama path lengkap dari direktori saat ini. Harap dicatat bahwa ketika Anda berada di direktori home, ini hanya akan menampilkan ~ seperti yang ditunjukkan di atas
  • Perhatikan bahwa ada spasi di akhir nilai PS1. Secara pribadi, saya lebih suka spasi di akhir prompt untuk keterbacaan yang lebih baik.

Jadikan pengaturan ini permanen dengan menambahkan export PS1=”\u@\h \w> ” ke .bash_profile (atau) .bashrc seperti yang ditunjukkan di bawah ini.

ramesh@dev-db ~> vi ~/.bash_profile (or)
ramesh@dev-db ~> vi ~/.bashrc
[Note: Add export PS1="\u@\h \w> " to one of the above files]

Pada postingan selanjutnya, saya akan menuliskan beberapa contoh praktis penggunaan PS1 secara detail.

2. PS2 – Perintah interaktif lanjutan

Perintah unix yang sangat panjang dapat dipecah menjadi beberapa baris dengan memberikan \ di akhir baris. Prompt interaktif default untuk perintah multi-baris adalah "> ". Mari kita ubah perilaku default ini untuk menampilkan "lanjutkan->" dengan menggunakan variabel lingkungan PS2 seperti yang ditunjukkan di bawah ini.

ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \
> --key_buffer_size=512M --sort_buffer_size=512M \
> --read_buffer_size=4M --write_buffer_size=4M \
> /var/lib/mysql/bugs/*.MYI
[Note: This uses the default ">" for continuation prompt]

ramesh@dev-db ~> export PS2="continue-> "

ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \
continue-> --key_buffer_size=512M --sort_buffer_size=512M \
continue-> --read_buffer_size=4M --write_buffer_size=4M \
continue-> /var/lib/mysql/bugs/*.MYI
[Note: This uses the modified "continue-> " for continuation prompt]

Saya merasa sangat membantu dan mudah dibaca, ketika saya memecah perintah panjang saya menjadi beberapa baris menggunakan \. Saya juga melihat orang lain yang tidak suka memecah perintah yang panjang. Apa preferensi Anda? Apakah Anda suka memecah perintah panjang menjadi beberapa baris?

3. PS3 – Prompt digunakan oleh "pilih" di dalam skrip shell

Anda dapat menentukan permintaan khusus untuk loop pilih di dalam skrip shell, menggunakan variabel lingkungan PS3, seperti yang dijelaskan di bawah ini.

Skrip dan keluaran shell TANPA PS3:

ramesh@dev-db ~> cat ps3.sh

select i in mon tue wed exit
do
  case $i in
    mon) echo "Monday";;
    tue) echo "Tuesday";;
    wed) echo "Wednesday";;
    exit) exit;;
  esac
done

ramesh@dev-db ~> ./ps3.sh

1) mon
2) tue
3) wed
4) exit
#? 1
Monday
#? 4
[Note: This displays the default "#?" for select command prompt]


Skrip shell dan keluaran DENGAN PS3:

ramesh@dev-db ~> cat ps3.sh

PS3="Select a day (1-4): "
select i in mon tue wed exit
do
  case $i in
    mon) echo "Monday";;
    tue) echo "Tuesday";;
    wed) echo "Wednesday";;
    exit) exit;;
  esac
done

ramesh@dev-db ~> ./ps3.sh
1) mon
2) tue
3) wed
4) exit
Select a day (1-4): 1
Monday
Select a day (1-4): 4
[Note: This displays the modified "Select a day (1-4): "
       for select command prompt]

4. PS4 – Digunakan oleh “set -x” untuk mengawali keluaran penelusuran

Variabel shell PS4 mendefinisikan prompt yang akan ditampilkan, saat Anda menjalankan skrip shell dalam mode debug seperti yang ditunjukkan di bawah ini.

Skrip dan keluaran shell TANPA PS4:

ramesh@dev-db ~> cat ps4.sh

set -x
echo "PS4 demo script"
ls -l /etc/ | wc -l
du -sh ~

ramesh@dev-db ~> ./ps4.sh

++ echo 'PS4 demo script'
PS4 demo script
++ ls -l /etc/
++ wc -l
243
++ du -sh /home/ramesh
48K     /home/ramesh
[Note: This displays the default "++" while tracing the output using set -x]


Skrip dan keluaran Shell DENGAN PS4:
PS4 yang didefinisikan di bawah dalam ps4.sh memiliki dua kode berikut:

  • $0 – menunjukkan nama skrip
  • $LINENO – menampilkan nomor baris saat ini dalam skrip
ramesh@dev-db ~> cat ps4.sh

export PS4='$0.$LINENO+ '
set -x
echo "PS4 demo script"
ls -l /etc/ | wc -l
du -sh ~

ramesh@dev-db ~> ./ps4.sh
../ps4.sh.3+ echo 'PS4 demo script'
PS4 demo script
../ps4.sh.4+ ls -l /etc/
../ps4.sh.4+ wc -l
243
../ps4.sh.5+ du -sh /home/ramesh
48K     /home/ramesh
[Note: This displays the modified "{script-name}.{line-number}+"
       while tracing the output using set -x]

5. PROMPT_COMMAND

Bash shell mengeksekusi konten PROMPT_COMMAND tepat sebelum menampilkan variabel PS1.

ramesh@dev-db ~> export PROMPT_COMMAND="date +%k:%m:%S"
22:08:42
ramesh@dev-db ~>
[Note: This displays the PROMPT_COMMAND and PS1 output on different lines]

Jika Anda ingin menampilkan nilai PROMPT_COMMAND pada baris yang sama dengan PS1, gunakan echo -n seperti gambar di bawah ini.

ramesh@dev-db ~> export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]"
[22:08:51]ramesh@dev-db ~>
[Note: This displays the PROMPT_COMMAND and PS1 output on the same line]

Jika Anda menyukai artikel ini, harap tandai artikel ini di del.icio.us dan Stumble menggunakan tautan yang disediakan di bawah, di bawah bagian 'Apa Selanjutnya?'.


Linux
  1. Menavigasi shell Bash dengan pushd dan popd

  2. Menyesuaikan shell Bash

  3. Bash Shell:Kendalikan PS1, PS2, PS3, PS4, dan PROMPT_COMMAND

  1. Cara memprogram dengan Bash:Sintaks dan alat

  2. Bagaimana cara menggunakan perintah jam tangan dan pekerjaan bersama di Bash?

  3. Kapan saya harus menggunakan #!/bin/bash dan kapan #!/bin/sh?

  1. Perbedaan Antara Variabel Shell Yang Diekspor Dan Yang Tidak Di Bash?

  2. Tujuan .bashrc Dan Bagaimana Cara Kerjanya?

  3. Skrip Bash Shell - Periksa bendera dan ambil nilainya