Dans le Bash
shell, je peux obtenir l'état de sortie de la commande via la $?
variable:
# ps -ef | grep "haha"
root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha
# echo $?
0
Est-il disponible uniquement dans le shell Bash? Ou puis-je également l'utiliser dans d'autres coques?
bash
shell
portability
Nan Xiao
la source
la source
Réponses:
Le
$?
code de sortie est commun à tout shell qui suit POSIX et est décrit dans 2.5.2 Paramètres spéciaux :la source
$r
je le crois). C'est donc le sh de pratiquement tous les systèmes de type Unix depuis Unix V7 à la fin des années 70, la plupart des autres shells (csh, tcsh, fish, rc) l'ont comme$status
.Comme l'a dit Thomas Dickey, n'importe quel shell POSIX (c'est-à-dire à peu près tous) en aura
$?
.Cette question m'a beaucoup intéressé, alors je l'ai testé sur n'importe quel shell sur lequel je pouvais mettre la main:
mksh
zsh
/bin/sh
sur mon Samsung Galaxy S5/bin/sh
sur mon routeurtcsh
ksh
dash
/bin/sh
sur mon système UNIX virtuel V de 1989 environcmd.exe
etpowershell.exe
sur mon ordinateur Windows 10et a
$?
travaillé dans tous ces mais,fish
etcmd.exe
.Trouvé deux choses intéressantes:
1.
$?
fonctionne dans Windows PowerShell!Eh bien, jusqu'à un certain point. Au lieu de retourner 0 ou un nombre supérieur, c'est juste
True
etFalse
.2.
$?
ne fonctionne pas dans le shellfish
.Cependant, lorsque vous tapez
$?
du poisson, vous obtenez ce message:Je ne l'ai pas beaucoup utilisé mais je ne suis pas surpris,
fish
semble avoir son propre langage shell intéressant, complètement différentbash
ou autre.la source
$status
ce qui est beaucoup plus simple / lisible IMO. Seuls les shells de type Bourne (parmi les shells Unix) utilisent$?
AFAIK.$?
que "sh ## s'est-il passé?" et après cela, je n'ai jamais oublié la signification de cette variable spéciale :)