No Bash
shell, eu posso obter o status de saída do comando através da $?
variável:
# ps -ef | grep "haha"
root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha
# echo $?
0
Está disponível apenas no shell Bash? Ou também posso usá-lo em outras conchas?
bash
shell
portability
Nan Xiao
fonte
fonte
Respostas:
O
$?
código de saída é comum a qualquer shell que segue o POSIX e é descrito em 2.5.2 Parâmetros especiais :fonte
$r
eu acredito). Então esse é o sh de praticamente todos os sistemas Unix-like desde o Unix V7 no final dos anos 70. A maioria dos outros shells (csh, tcsh, fish, rc) tem como$status
.Como Thomas Dickey disse, qualquer shell POSIX (ou seja, praticamente todos eles) terá
$?
.Essa pergunta me interessou bastante, então eu a testei em qualquer shell em que pudesse colocar minhas mãos:
mksh
zsh
/bin/sh
no meu Samsung Galaxy S5/bin/sh
no meu roteadortcsh
ksh
dash
/bin/sh
no meu sistema UNIX virtual V de 1989 ou maiscmd.exe
epowershell.exe
no meu computador com Windows 10e
$?
trabalhou em todos estes, masfish
ecmd.exe
.Encontrou duas coisas interessantes:
1.
$?
funciona no Windows PowerShell!Bem, até certo ponto. Em vez de retornar 0 ou um número maior, é apenas
True
eFalse
.2.
$?
não funciona no shellfish
.No entanto, quando você digita
$?
peixe, você recebe esta mensagem:Não usei muito, mas não estou surpreso,
fish
parece ter sua própria linguagem shell interessante, completamente diferentebash
ou o que seja.fonte
$status
muito mais IMO direto / legível. Somente as conchas tipo Bourne (entre as conchas do Unix) usam o$?
AFAIK.$?
como "sh ## aconteceu?" e, depois disso, eu nunca esqueceu o significado dessa variável especial :)