셸 에서는 Bash
변수를 통해 명령 종료 상태를 얻을 수 있습니다 $?
.
# ps -ef | grep "haha"
root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha
# echo $?
0
Bash 쉘에서만 작동합니까? 아니면 다른 쉘에서도 사용할 수 있나요?
답변1
종료 코드는 $?
모든 POSIX 호환 셸에 공통적이며 다음과 같습니다.2.5.2 특수 매개변수:
?
가장 가까운 파이프의 소수점 종료 상태로 확장합니다(참조:관로).
답변2
Thomas Dickey가 말했듯이 모든 POSIX 쉘(즉, 거의 모든 쉘)은 $?
.
이 질문이 흥미로워서 손에 넣을 수 있는 모든 셸에서 테스트했습니다.
mksh
zsh
/bin/sh
내 삼성 갤럭시 S5에서/bin/sh
내 라우터에서tcsh
ksh
dash
/bin/sh
내 1989년경 가상 UNIX System V에서cmd.exe
powershell.exe
내 Windows 10 컴퓨터 에서
그리고 $?
이 모든 일을 해왔지만, fish
그리고 cmd.exe
.
두 가지 흥미로운 점을 발견했습니다.
1. $?
Windows PowerShell에서 작업하세요!
글쎄요. 0 이상의 숫자를 반환하지 않고 합계를 반환 True
합니다 False
.
PS C:\WINDOWS\system32> echo $?
True
PS C:\WINDOWS\system32> gfdhgfhfdgfdg
gfdhgfhfdgfdg : The term 'gfdhgfhfdgfdg' is not recognized as the name of a cmdlet, ...(big long error output).....
PS C:\WINDOWS\system32> echo $?
False
2. $?
쉘에서는 작동하지 않습니다 fish
.
그러나 "fish"를 입력하면 $?
다음 메시지가 나타납니다.
~$ echo $?
$? is not the exit status. In fish, please use $status.
fish: echo $?
나는 그것을 많이 사용하지 않았지만 놀랍지 않습니다. fish
그것과는 완전히 다른 흥미로운 쉘 언어가있는 것 같습니다 bash
.