Le tue opzioni qui dipenderanno dalla tua shell. In essa zsh
si trova una pratica funzione hook chiamata preexec()
che viene eseguita proprio prima di qualsiasi comando interattivo della shell. Creando una funzione con questo nome, puoi far eseguire le cose. È inoltre possibile eseguire il follow-up con una funzione chiamata precmd()
che verrà eseguita appena prima che venga disegnato il prompt successivo, che sarà subito dopo la fine del comando.
Creando questa coppia di funzioni, è possibile avere qualsiasi comando arbitrario che si desidera eseguire prima e dopo qualunque comando venga emesso al prompt. È possibile utilizzarlo per registrare l'utilizzo della shell, creare blocchi, testare l'ambiente o come nell'esempio calcolare tempo o risorse impiegate durante l'esecuzione di un comando.
In questo esempio, creeremo noi stessi un timestamp di riferimento prima di eseguire un comando utilizzando preexec()
quindi calcolare il tempo impiegato per eseguire il comando utilizzando precmd()
e emetterlo prima del prompt o registrarlo. Esempio:
preexec() {
CMDSTART=$(date +%s%N)
}
precmd() {
CMDRUNTIME=$(($(date +%s%N)-$CMDSTART))
echo "Last command ran for $CMDRUNTIME nanoseconds."
}
Nota: per questo esempio particolare, esiste una funzione incorporata ancora più semplice. Tutto quello che devi fare è attivare il runtime reporting in ZSH e lo farà automaticamente.
$ export REPORTTIME=0
$ ls -d
./
ls -BF --color=auto -d 0.00s user 0.00s system 0% cpu 0.002 total
In un'implementazione più pratica di preexec()
, lo uso per vedere se la shell è in esecuzione all'interno tmux
o screen
e, in tal caso, per inviare informazioni a monte del comando attualmente in esecuzione da visualizzare nel nome della scheda.
Sfortunatamente in bash questo piccolo meccanismo non esiste. Ecco il tentativo di un uomo di replicarlo . Vedi anche la risposta di Gilles per un piccolo trucco simile.
preexec
, ma non vuoi eseguirlo all'internopreexec
(ad es.preexec() { time $1; }
), Perché la shell lo esegue ancora dopo ipreexec
ritorni. Quindi il meglio che possiamo fare è qualcosa di simile.