Perintah sebelum setiap perintah bash


Jawaban:


37

Maaf untuk jawaban yang salah sebelumnya, saya salah mengerti pertanyaan Anda.

Agar waktu ditambahkan sebelum setiap perintah yang Anda jalankan di shell, Anda dapat melakukan sesuatu seperti ini

bind 'RETURN: "\e[1~time \e[4~\n"'

Ini akan mengubah kunci kembali. Sekarang setiap kali Anda menekan balik alih-alih menulis baris baru \ n itu akan pergi ke awal baris, masukkan teks 'waktu' dan spasi, pergi ke akhir baris dan masukkan baris baru \ n sehingga menghasilkan baris yang diinginkan sehingga menghasilkan yang diinginkan efek.

Jika Anda tidak ingin mengorbankan Enter Key Anda, Anda bisa membuat benchmark-enter Key 'kedua' seperti F12 dengan mengikat perintah seperti ini

bind '"\e[24~": "\e[1~time \e[4~\n"'

Sekarang alih-alih mengganti kunci kembali yang Anda ikat F12.

Latar belakang dari semua ini adalah bahwa bash menggunakan GNU readline untuk membaca perintah. Jadi readline akan menjadi titik awal yang baik untuk manipulasi perintah lebih lanjut, dll.


1
+1 solusi bagus! Saya suka gagasan memiliki tolok ukur tolok ukur yang terpisah dari tombol masuk biasa.
quack quixote

itu ide yang cerdas. Bagaimana Anda bisa menggeneralisasikannya untuk menjalankan fungsi yang ditentukan pengguna sebelum setiap perintah? Saya tidak tahu cara menggabungkan kode bash dan fungsi readline dalam ikatan yang sama.
Gilles 'SANGAT berhenti menjadi jahat'

Apakah ini tidak akan berjalan di Mac? Saya menjalankan perintah di terminal dan tombol enter saya sepertinya tidak melakukan apa-apa sekarang.
akki

6

Saya menyadari bahwa ini di luar ruang lingkup pertanyaan ini tetapi ...

Di zsh(yang, setahu saya set super bash) jika Anda menetapkan variabel berikut dalam .zshrcfile Anda :

export REPORTTIME=5

Setiap perintah yang membutuhkan waktu lebih dari 5 detik (saya cukup yakin) akan menampilkan output dari time. Semua perintah yang selesai lebih cepat tidak. Dan dalam kasus-kasus itu seseorang tidak terlalu peduli, jadi senang tidak mengacaukan segalanya. Ada juga banyak fitur keren lainnya zshyang bisa Anda nikmati saat melakukannya.


Tip yang bagus. Walaupun zsh pasti memiliki superset dari fungsionalitas bash , sintaksnya bukanlah superset dari sintaks bash , jadi ini bukan pengganti “drop in”.
Chris Johnsen

1

Sertakan \ t dalam string prompt Anda. Ini akan mencakup waktu di prompt Anda pada titik di mana Anda memasukkannya. Lihat: http://www.ibm.com/developerworks/linux/library/l-tip-prompt/


Itu waktu saat ini pada saat prompt dihasilkan, bukan waktu yang diperlukan untuk menjalankan perintah sebelumnya.
Dijeda sampai pemberitahuan lebih lanjut.

Benar; dan perbedaan antara itu dan waktu sekarang prompt berikutnya adalah run-time (dikurangi waktu mengetik, tentu saja - menempelkan teman Anda di sini) Tidak diperlukan penugasan kembali kunci.
JRobert

0

PS1 sepertinya cara standar untuk melakukan sesuatu seperti ini.


2
Ini memodifikasi tampilan, bukan perintah yang sebenarnya dieksekusi.
user1686

@grawity Right - tetapi itu akan membuat Anda mendapatkan apa yang Anda inginkan ... waktu yang ditentukan untuk setiap baris.
Jason Sundram

3
Yang benar-benar berbeda dari apa yang timedilakukan (ini mengukur berapa lama waktu yang diperlukan untuk menjalankan suatu perintah).
user1686

@ kegembiraan, saya kira Anda benar - Anda harus melakukan pengurangan sendiri. Sepertinya @Jrobert punya ide yang sama.
Jason Sundram
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.