La $?
variable contiene el estado de salida del último comando ejecutado. ¿Hay alguna variable que contenga el comando de última ejecución?
bash
shell
scripting
environment-variables
Eimantas
fuente
fuente
Respuestas:
Use
fc
para obtener la línea de comando anterior. Normalmente se usa para editar la línea de comando anterior en su editor favorito, pero también tiene un modo de "lista":last_command="$(fc -nl -1)"
fuente
caller
y las matrices de bashBASH_LINENO
,BASH_SOURCE
yFUNCNAME
hacer una especie de seguimiento de la pila.Si el último comando se ejecutó sin argumentos, se guardará en la
$_
variable. Esto normalmente contiene el último argumento del comando anterior, por lo que si no hubiera argumentos, el valor de$_
es el último comando en sí.Otra opción es aprender los detalles del último comando de fondo . Como escribió l0b0,
$!
contiene su PID, por lo que puede analizar la salida deps $!
(posiblemente con opciones de formato adicionalesps
).fuente
No, pero puede obtenerlo durante la ejecución para almacenar otros comandos:
$0
: Ruta del script de shell actual.$FUNCNAME
: "Nombre de la función actual"."$@"
: Todos los parámetros del comando actual, citados por separado.$!
: "PID (ID de proceso) del último trabajo ejecutado en segundo plano".$$
: "ID de proceso (PID) del script en sí".Por lo tanto, el comando completo del script actual debería ser
"$0" "$@"
. Si es una función, debería ser"$FUNCNAME" "$@"
. Es posible que desee almacenar eso en una matriz para su procesamiento futuro. Por ejemplo, almacene esto entest.sh
:Cuando se ejecuta
./test.sh "first argument" "second argument"
, debería devolver:Que son llamadas equivalentes.
fuente
BASH_COMMAND
variable, pero no parece ser útil de ninguna manera, aparte del uso en trampas.some-command
un script de shell y falla? Tendré un estado distinto de cero$?
, ¿"no" se mantendrá por la existencia de retención variablesome-command
?La
DEBUG
trampa le permite ejecutar un comando justo antes de la ejecución de cualquier comando simple. Una versión de cadena del comando a ejecutar (con palabras separadas por espacios) está disponible en laBASH_COMMAND
variable.Tenga en cuenta que
previous_command
cambiará cada vez que ejecute un comando, así que guárdelo en una variable para poder usarlo. Si desea conocer también el estado de retorno del comando anterior, guarde ambos en un solo comando.Si solo desea abortar en un comando fallido, use
set -e
para que su script salga en el primer comando fallido. Puede mostrar el último comando de laEXIT
trampa .Un enfoque alternativo que podría funcionar para algunos usos es utilizar
set -x
para imprimir un seguimiento de la ejecución del script y examinar las últimas líneas del seguimiento.fuente
Creo que es esencial encontrar el último comando fallido cuando tengo
set -e
yset -o pipefail
opciones, ya que de lo contrario bash simplemente aborta sin comentarios sobre por qué, así que esto es lo que encontré funcionando bien:Si ejecuta lo anterior, terminará viendo el siguiente tipo de salida a continuación:
Es posible que el número de línea no siempre sea exacto, pero debería darle algo lo suficientemente cercano como para ser útil.
fuente