Pertanyaan Jalankan skrip bash setiap kali ketika baris perintah dieksekusi


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

Sebagai contoh, saya memiliki file bash ./script, Saya ingin membuatnya berjalan secara otomatis ketika saya mengetikkan baris perintah apa pun. Setelah saya menjalankan baris perintah pwd maka itu ./script akan dieksekusi. Setelah saya mengetik baris perintah selanjutnya ls -la maka itu ./script akan dieksekusi lagi.


9
2017-10-03 11:11


asal


bolehkah kami bertanya: tindakan macam apa yang ingin Anda lakukan masing-masing dan setiap perintah diketik? dan haruskah itu hanya untuk mereka yang diketik secara interaktif? atau juga untuk semua perintah dalam skrip? dan bagaimana dengan perintah yang diketik melalui ssh? dll. Ini bisa menjadi a XYProblem - Olivier Dulac


Jawaban:


Anda perlu mengatur PROMPT_COMMAND variabel. Dari man bash:

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

Misalnya, ini akan menulis tanggal saat ini menjadi /tmp/PC setiap kali perintah dijalankan:

 $ PROMPT_COMMAND="date > /tmp/PC"

13
2017-10-03 11:18



Ya, saya mengerti .. solusi keren. (upvoted) - Ender Phan
Ini salah. Perintah echo $(date) akan dijalankan pada waktu deklarasi, jadi akan selalu menampilkan (menyimpan) waktu yang sama. - heemayl
@heemayl: tentu saja Anda benar, saya memperbaikinya - Arkadiusz Drabczyk
@ lộcphan Jika salah satu jawaban ini memecahkan masalah Anda, harap luangkan waktu sejenak dan Terima itu dengan mengklik tanda centang di sebelah kiri. Itu akan menandai pertanyaan seperti dijawab dan merupakan cara terimakasih yang diungkapkan di situs Stack Exchange. - terdon♦
@heemayl: Mengapa? ... - Arkadiusz Drabczyk


Anda sedang mencari PROMPT_COMMAND variabel lingkungan, nilai variabel ini akan dieksekusi sebagai perintah, setelah setiap perintah yang diberikan di terminal dijalankan, tepat sebelum menunjukkan prompt berikutnya.

Misalnya, atur sebagai:

export PROMPT_COMMAND='/path/to/script'

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

Sekarang skrip akan dijalankan setelah setiap perintah.

Sekadar untuk diperhatikan, jika Anda tidak ingin variabel diekspor, maka jadikan itu sebagai variabel shell, bukan lingkungan, drop 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.

11
2017-10-03 11:15



Saya mengerti, terima kasih banyak atas bantuan Anda :) (upvoted btw) - Ender Phan
Mengapa kamu menggunakan export? - Arkadiusz Drabczyk
@ArkadiuszDrabczyk export akan membuat variabel PROMPT_COMMAND variabel lingkungan yaitu variabel akan tersedia untuk semua proses anak (misalnya subkut) dari shell saat ini. Jika Anda hanya ingin membatasi hanya dalam sesi shell saat ini (variabel shell), hapus export. - heemayl
@heemayl: IMO export bukan praktik yang baik di sini - PROMPT_COMMAND hanya boleh diatur dalam file startup shell interaktif dan tidak boleh terlihat di lingkungan - Arkadiusz Drabczyk