Perintah sebelum setiap perintah bash

18

Apakah ada yang tahu cara menempatkan perintah 'waktu' sebelum setiap perintah dalam sesi bash?

jthoenes
sumber
1
jadi ... Anda ingin secara otomatis menambahkan 'waktu' ke setiap baris perintah?
quack quixote
1
ya, luar biasa ... untuk pertunjukan mesuarament jelas
jthoenes

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.

Lukas Loesche
sumber
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.

tychoish
sumber
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/

JRobert
sumber
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.

Jason Sundram
sumber
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