resueltos - shell script linux
¿Qué nos da “$” exactamente en un script de shell? (5)
Es el código de retorno del comando ejecutado más recientemente.
Por convención, 0 es una salida exitosa y no cero indica algún tipo de error.
Esta pregunta ya tiene una respuesta aquí:
- Significado de $? en shell scripts 7 respuestas
Vi el código escrito en algún lugar en línea, y quería saber qué hace exactamente "$? hacer / darnos Googlear no ayudó.
Aquí está el código que lo vi en:
#!/bin/sh
ping -c 2 localhost
if [ $? != 0 ] ; then
echo "Couldn''t ping localhost, weird"
fi
ping -c 2 veryweirdhostname.noend
if [ $? != 0 ] ; then
echo "Surprise, Couldn''t ping a very weird hostname.."
fi
echo "The pid of this process is $$"
Tomado de: http://efod.se/writings/linuxbook/html/shell-scripts.html
Esta variable especial muestra el estado de salida del último comando que se ejecutó en un script o línea de comandos. Por ejemplo, en una línea de comandos, el usuario podría escribir
who; echo $?
La salida sería entonces
user tty7 2014-07-13 19:47
0
Esto muestra la salida de who y el estado de salida del comando. Un guión sería el mismo.
#!/bin/bash
who
echo $?
Salida: 0
La mayoría de las respuestas faltan un poco de detalle. Una respuesta definitiva se encuentra en el estándar POSIX para el shell, en la sección sobre parámetros especiales :
PS Se expande al estado de salida decimal de la tubería más reciente (consulte la sección Tuberías).
No se sorprenda con la palabra canalización , porque incluso un comando simple como ls
es gramaticalmente una tubería que consiste en un solo comando. Pero entonces, ¿qué es $?
para una tubería multi-comando? Es el estado de salida del último comando en la tubería.
¿Y qué pasa con las tuberías ejecutadas en segundo plano, como grep foo bigfile|head -n 10 > result &
?
Su estado de salida se puede recuperar a través de la wait
una vez que el último comando de la tubería haya finalizado. El proceso de fondo pid está disponible como $!
y $?
solo informa si el comando de fondo se inició correctamente.
Otro detalle que vale la pena mencionar es que el estado de salida generalmente está en el rango de 0 a 255, con 128 a 255 que indican que el proceso salió debido a una señal. Es probable que la devolución de otros valores de un programa C no se refleje con precisión en $?
.
las otras respuestas cubren a bash bastante bien, pero no especifica un shell en su pregunta. En csh (y tcsh) $?
se puede utilizar para consultar la existencia de variables , por ejemplo,
if $?my_var then
echo my_var exists
endif
$?
es una variable que contiene el valor de retorno del último comando que ejecutó.
Ejemplo de programa C ( example.c
):
int main() { return 1; }
Ejemplo Bash:
gcc -o example example.c
./example
echo $? # prints 1