SUNTING
TL; DR : buat pintasan pelengkapan otomatis .inputrc
dan fungsikan dalam .bashrc
. Jalankan perintah seperti biasa, ketikkan, tetapi alih-alih ENTER, tekan pintasan yang Anda tentukan.inputrc
Orang yang memberi hadiah pada pertanyaan ini mengatakan:
"Semua jawaban yang ada memerlukan mengetikkan perintah tambahan setelah perintah. Saya ingin jawaban yang melakukan ini secara otomatis."
Saat meneliti solusi untuk masalah ini, saya menemukan pertanyaan ini dari stackexchange, yang memungkinkan pengikatan CtrlJke urutan perintah: Ctrla(pindah ke awal baris), tempatkan string "mesure" di depan perintah yang Anda masukkan, Ctrlm(jalankan)
Dengan demikian Anda mendapatkan fungsionalitas penyelesaian otomatis dan ENTERperintah terpisah untuk mengukur waktu, sambil mempertahankan tujuan asli dari fungsi kedua yang saya posting di bawah ini.
Sampai sekarang, berikut adalah isi ~/.inputrc
file saya :
"\C-j": "\C-a measure \C-m"
Dan di sini adalah isi dari .bashrc
(catatan, saya belum pernah menggunakan bash selamanya - Saya menggunakan mksh sebagai shell saya, maka itulah yang Anda lihat di posting asli. Fungsionalitasnya masih sama)
PS1=' serg@ubuntu [$(pwd)]
================================
$ '
function measure ()
{
/usr/bin/time --output="/home/xieerqi/.timefile" -f "%e" $@
if [ $( cat ~/.timefile| cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Pos Asli
Inilah ide saya - gunakan fungsi dalam .bashrc
. Prinsip dasar - gunakan /usr/bin/time
untuk mengukur waktu yang dibutuhkan untuk menyelesaikan perintah, dan jika lebih dari 15 detik, kirim pemberitahuan.
function measure ()
{
if [ $( /usr/bin/time -f "%e" $@ 2>&1 >/dev/null ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Di sini saya mengarahkan output ke /dev/null
tetapi untuk melihat output, mengarahkan ke file juga dapat dilakukan.
Pendekatan yang jauh lebih baik, IMHO, adalah mengirim output waktu ke beberapa file di folder rumah Anda (supaya Anda tidak mencemari sistem Anda dengan timefiles, dan selalu tahu ke mana harus mencari). Ini versi kedua
function measure ()
{
/usr/bin/time --output=~/.timefile -f "%e" $@
if [ $( cat ~/.timefile | cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Dan inilah screenshot dari versi pertama dan kedua, dalam urutan itu
Versi pertama, tidak ada output
Versi kedua, dengan output