En el Bash
shell, puedo obtener el estado de salida del comando a través de la $?
variable:
# ps -ef | grep "haha"
root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha
# echo $?
0
¿Está disponible solo en el shell Bash? ¿O también puedo usarlo en otros proyectiles?
bash
shell
portability
Nan Xiao
fuente
fuente
Respuestas:
El
$?
código de salida es común a cualquier shell que sigue a POSIX, y se describe en 2.5.2 Parámetros especiales :fuente
$r
creo). Así que ese es el aspecto de prácticamente todos los sistemas similares a Unix desde Unix V7 a finales de los 70, la mayoría de los otros shells (csh, tcsh, fish, rc) lo tienen como$status
.Como dijo Thomas Dickey, cualquier shell POSIX (es decir, casi todos) tendrá
$?
.Esta pregunta me interesó bastante, así que la probé en cualquier shell que pudiera tener en mis manos:
mksh
zsh
/bin/sh
en mi Samsung Galaxy S5/bin/sh
en mi enrutadortcsh
ksh
dash
/bin/sh
en mi sistema virtual UNIX V desde 1989 más o menoscmd.exe
ypowershell.exe
en mi computadora con Windows 10y
$?
trabajado en todos estos perofish
ycmd.exe
.Encontramos dos cosas interesantes:
1.
$?
funciona en Windows PowerShell!Bueno, hasta cierto punto. En lugar de devolver 0 o un número mayor, es justo
True
yFalse
.2.
$?
no funciona en el shellfish
.Sin embargo, cuando escribe
$?
pescado, recibe este mensaje:No lo he usado mucho, pero no me sorprende,
fish
parece tener su propio lenguaje de shell interesante, completamente diferentebash
o lo que sea.fuente
$status
una OMI mucho más sencilla / legible. Solo los proyectiles tipo Bourne (entre los proyectiles Unix) usan$?
AFAIK.$?
como "sh ## sucedió?" y después de eso, nunca olvidé el significado de esta variable especial :)