En el Bashshell, 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
$rcreo). 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:
mkshzsh/bin/shen mi Samsung Galaxy S5/bin/shen mi enrutadortcshkshdash/bin/shen mi sistema virtual UNIX V desde 1989 más o menoscmd.exeypowershell.exeen mi computadora con Windows 10y
$?trabajado en todos estos perofishycmd.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
TrueyFalse.2.
$?no funciona en el shellfish.Sin embargo, cuando escribe
$?pescado, recibe este mensaje:No lo he usado mucho, pero no me sorprende,
fishparece tener su propio lenguaje de shell interesante, completamente diferentebasho lo que sea.fuente
$statusuna 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 :)