Desde man bash
:
ps Se expande al estado de salida de la canalización en primer plano ejecutada más recientemente.
echo $?
devolverá el estado de salida del último comando. Tienes 127
ese es el estado de salida del último comando ejecutado con algún error (lo más probable). Los comandos al finalizar con éxito salen con un estado de salida de 0
(más probablemente). El último comando dio salida 0
desde el echo $v
en la línea anterior terminó sin error.
Si ejecutas los comandos
v=4
echo $v
echo $?
Obtendrá resultados como:
4 (from echo $v)
0 (from echo $?)
Prueba también:
true
echo $?
Obtendrás 0
.
false
echo $?
Obtendrás 1
.
El true
el comando no hace nada, solo sale con un código de estado 0
; y el false
El comando tampoco hace nada, solo sale con un código de estado que indica una falla (es decir, con el código de estado 1
).
$?
es útil en shellscripts como una forma de decidir qué hacer dependiendo de cómo funcionó el comando anterior (verificando el estado de salida). Podemos esperar que el estado de salida sea 0
cuando el comando anterior funcionó (finalizó con éxito), de lo contrario, un valor numérico distinto de cero.
Ejemplo de demostración:
#!/bin/bash
patience=3
read -t "$patience" -p "Press 'Enter' if you run Unix or Linux, otherwise press 'ctrl+d' "
status="$?"
if [[ $status -eq 0 ]]
then
echo "That's great :-)"
elif [[ $status -eq 1 ]]
then
echo "(exit status=$status)
You are welcome to try Unix or Linux :-)"
else
echo "(exit status=$status)
You did not answer within $patience seconds. Anyway :-)"
fi
echo "'Unix & Linux' is a question/answer web site for
Unix and Linux operating systems"
Puede preguntar cómo ejecutar un shellscript bash sin Unix o Linux;-)