MODIFICARE
TL; DR : crea il collegamento al completamento automatico .inputrc
e funzione in .bashrc
. Esegui il comando come al solito, digita, ma invece di ENTER, premi il collegamento che hai specificato.inputrc
La persona che ha posto la grazia a questa domanda ha detto:
"Tutte le risposte esistenti richiedono di digitare un comando aggiuntivo dopo il comando. Voglio una risposta che lo faccia automaticamente."
Durante la ricerca delle soluzioni a questo problema mi sono imbattuto in questa domanda da StackExchange, che consente l'associazione CtrlJa una sequenza di comandi: Ctrla(sposta all'inizio della riga), posiziona la stringa "mesure" davanti al comando che hai inserito, Ctrlm(esegui)
In questo modo ottieni funzionalità di auto-completamento e ENTERcomando separato per misurare il tempo, pur mantenendo lo scopo originale della seconda funzione che ho pubblicato qui sotto.
A partire da ora, ecco i contenuti del mio ~/.inputrc
file:
"\C-j": "\C-a measure \C-m"
Ed ecco il contenuto di .bashrc
(nota, non uso mai bash da sempre - uso mksh come shell, quindi è quello che vedi nel post originale. La funzionalità è sempre la stessa)
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
}
Posta originale
Ecco la mia idea: utilizzare una funzione in .bashrc
. Principio di base: utilizzare /usr/bin/time
per misurare il tempo necessario per il completamento del comando e, se è superiore a 15 secondi, inviare una notifica.
function measure ()
{
if [ $( /usr/bin/time -f "%e" $@ 2>&1 >/dev/null ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Qui sto reindirizzando l'output /dev/null
ma per visualizzare l'output, è possibile eseguire anche il reindirizzamento al file.
Un approccio molto migliore, IMHO, è di inviare l'output di tempo ad alcuni file nella cartella home (solo per non inquinare il sistema con i file temporali e sapere sempre dove cercare). Ecco quella seconda versione
function measure ()
{
/usr/bin/time --output=~/.timefile -f "%e" $@
if [ $( cat ~/.timefile | cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Ed ecco gli screenshot della prima e della seconda versione, in questo ordine
Prima versione, nessun output
Seconda versione, con output