Sus opciones aquí dependerán de su shell. En zsh
Existe una función de enlace conveniente llamada preexec()
que se ejecuta justo antes de que los comandos de shell interactivas. Al crear una función con este nombre, puede hacer que se ejecuten cosas. También puede realizar un seguimiento con una función llamada precmd()
que se ejecutará justo antes de que se dibuje el siguiente mensaje, que será justo después de que finalice su comando.
Al crear este par de funciones, puede ejecutar los comandos arbitrarios que desee ejecutar antes y después de los comandos emitidos en el indicador. Puede usar esto para registrar el uso de shell, crear bloqueos, probar el entorno o, como en su ejemplo, calcular el tiempo o los recursos gastados mientras se ejecuta un comando.
En este ejemplo, crearemos una marca de tiempo de referencia antes de ejecutar un comando usando, preexec()
luego calcularemos el tiempo empleado en ejecutar el comando precmd()
y lo enviaremos antes del aviso o lo desconectaremos. Ejemplo:
preexec() {
CMDSTART=$(date +%s%N)
}
precmd() {
CMDRUNTIME=$(($(date +%s%N)-$CMDSTART))
echo "Last command ran for $CMDRUNTIME nanoseconds."
}
Nota: Para este ejemplo en particular, hay una función incorporada aún más fácil. Todo lo que tiene que hacer es activar los informes de tiempo de ejecución en ZSH y lo hará automáticamente.
$ export REPORTTIME=0
$ ls -d
./
ls -BF --color=auto -d 0.00s user 0.00s system 0% cpu 0.002 total
En una aplicación más práctica de preexec()
, lo uso ver si el shell se ejecuta dentro de tmux
o screen
y, si es así, para enviar información sobre el comando de aguas arriba está ejecutando actualmente para que se muestre en el nombre de la ficha.
Desafortunadamente en bash este pequeño mecanismo no existe. Aquí está el intento de un hombre de replicarlo . También vea la respuesta de Gilles para un pequeño truco ingenioso similar.
preexec
, pero no desea ejecutarlo dentro delpreexec
(por ejemplopreexec() { time $1; }
), porque el shell todavía lo ejecuta después de quepreexec
regrese. Entonces, lo mejor que podemos hacer es algo similar.