Jalankan skrip bash setiap kali ketika baris perintah dieksekusi

9

Saya pengguna Ubuntu / Linux baru, saya ingin mengajukan pertanyaan seperti judul saya di atas.

Misalnya, saya punya file bash ./script, saya ingin membuatnya berjalan secara otomatis ketika saya mengetikkan baris perintah apa pun. Setelah saya mengeksekusi baris perintah pwdmaka ./scriptakan dieksekusi. Setelah saya ketik baris perintah selanjutnya ls -lamaka ./scriptakan dieksekusi lagi.

Ender Phan
sumber
4
bolehkah kita bertanya: tindakan apa yang ingin Anda lakukan pada setiap perintah yang diketik? dan haruskah hanya untuk mereka yang mengetik secara interaktif? atau juga untuk perintah dalam skrip? dan bagaimana dengan perintah yang diketikkan ssh? dll. Ini bisa menjadi masalah XY
Olivier Dulac

Jawaban:

13

Anda perlu mengatur PROMPT_COMMANDvariabel. Dari man bash:

PROMPT_COMMAND
              If set, the value is executed as a command prior to
              issuing each primary prompt.

Sebagai contoh, ini akan menulis tanggal saat ini ke /tmp/PCsetiap kali perintah dijalankan:

 $ PROMPT_COMMAND="date > /tmp/PC"
Arkadiusz Drabczyk
sumber
1
Yap, saya mengerti .. solusi yang cukup keren. (Dipilih)
Ender Phan
1
Ini salah. Perintah echo $(date)akan dijalankan pada waktu deklarasi, jadi akan selalu menampilkan (menyimpan) pada waktu yang sama.
heemayl
@heemayl: tentu saja Anda benar, saya memperbaikinya
Arkadiusz Drabczyk
@ lộcphan Jika salah satu dari jawaban ini menyelesaikan masalah Anda, mohon luangkan waktu dan terima dengan mengklik tanda centang di sebelah kiri. Itu akan menandai pertanyaan sebagai dijawab dan cara terima kasih diungkapkan di situs Stack Exchange.
terdon
@ Heemayl: Kenapa? ...
Arkadiusz Drabczyk
11

Anda mencari PROMPT_COMMANDvariabel lingkungan, nilai variabel ini akan dieksekusi sebagai perintah, setelah setiap perintah yang diberikan di terminal dieksekusi, tepat sebelum menampilkan prompt berikutnya.

Misalnya, atur sebagai:

export PROMPT_COMMAND='/path/to/script'

Buat skrip /path/to/script,, dapat dieksekusi terlebih dahulu.

Sekarang skrip akan dijalankan setelah setiap perintah.

Sebagai catatan, jika Anda tidak ingin variabel diekspor yaitu menjadikannya variabel shell alih-alih variabel lingkungan, lepas export:

PROMPT_COMMAND='/path/to/script'

Dari man bash:

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt.
heemayl
sumber
Saya mengerti, terima kasih banyak atas bantuannya :) (btw tervvotasikan)
Ender Phan
Mengapa Anda menggunakan export?
Arkadiusz Drabczyk
@ArkadiuszDrabczyk exportakan menjadikan variabel PROMPT_COMMANDsebagai variabel lingkungan, yaitu variabel akan tersedia untuk semua proses anak (mis. Subkulit) dari shell saat ini. Jika Anda hanya ingin membatasi dalam sesi shell saat ini saja (variabel shell), hapus export.
heemayl
5
@heemayl: IMO exportbukan praktik yang baik di sini - PROMPT_COMMANDhanya boleh diatur dalam file startup shell interaktif dan tidak boleh terlihat di lingkungan
Arkadiusz Drabczyk