Cara memanggil skrip setelah setiap perintah bash


22

Apakah mungkin untuk memanggil skrip dalam contoh ini dinamai hey.shsetelah setiap perintah bash?

Misalnya Anda mengetikkan lstekan enter dan ls lari, maka hey.shakan lari.

Anda kemudian mengetik cd .. (atau perintah lain) , cd menjalankan kemudian hey.shakan berjalan, dan seterusnya.


2
Ini bisa merupakan masalah XY atau ide yang sangat aneh; apa yang ingin Anda capai?
jasonwryan

alias di bash.rc mungkin?
moonbutt74

Jawaban:


29
PROMPT_COMMAND+="hey.sh;"

PROMPT_COMMAND Jika diatur, nilai dieksekusi sebagai perintah sebelum mengeluarkan setiap prompt utama.


Catatan: Variabel lingkungan vs variabel shell

Secara default, PROMPT_COMMANDadalah bukan sebuah variabel lingkungan . Itu hanya variabel shell .

Kedua jenis variabel diakses dengan cara yang sama ( "$variable*"), tetapi variabel lingkungan diwarisi oleh proses anak sedangkan variabel shell tidak.

Konvensi ini adalah untuk mengkapitalisasi variabel lingkungan + variabel shell yang mengonfigurasi shell Anda (PROMPT_COMMAND memang mengonfigurasi shell Anda), tetapi tetap menggunakan jenis variabel yang huruf kecil.

Dalam bash , Anda dapat melakukan: declare -puntuk mengetahui apakah suatu variabel diekspor (= adalah variabel lingkungan) atau tidak:

$ declare -p PATH
declare -x PATH=... #-x means it's exported
$ declare PROMPT_COMMAND
declare -- PROMPT_COMMAND=... #no -x so just a shell variable

2
@ John. Jangan export. Atur saja (atau tambahkan, misalnya, seperti yang ditunjukkan di atas).
PSkocik

Rapi, bagaimana kalau setelah itu?
moonbutt74

2
@ moonbutt74 sebelum setiap perintah == setelah setiap perintah + di awal sesi bash Anda
PSkocik

@PSkocik saya mengerti saya hanya ingin tahu apakah itu sudah merupakan variabel lingkungan, berdasarkan perintah gema cepat saya tahu itu. Ini tepat seperti yang saya cari
John

@ John Secara default, itu hanya variabel shell bukan variabel lingkungan.
PSkocik
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.