크래시 쉘: 명령이 성공적으로 실행되었는지 확인하는 방법

크래시 쉘: 명령이 성공적으로 실행되었는지 확인하는 방법

테스트를 자동화하기 위해 크래시 패키지를 사용하고 있습니다. $?충돌하는 쉘 내에서 이전 명령이 성공적으로 실행되었는지 확인하는 데 사용할 수 있는 비슷한 것이 있습니까 ?

예를 들어, 다음과 같은 명령을 내릴 때:

crash> bt -a

일단 실행되면 실행이 성공했는지 여부를 어떻게 알 수 있나요? 내가 염두에 두고 있는 유일한 해결책은 결과를 grep하는 것이지만, 환경이 변하면 신뢰할 수 없습니다.

이것이 내가 시도할 때 얻는 것입니다 echo $?:

crash> bt asd
bt: invalid task or pid value: asd
crash> $?
crash: command not found: $?
crash> echo $?
0
crash>
crash> q
root@at0012-ubuntu:~/crashKernel# 

$?항상 0을 표시합니다.

며칠 전에 슈퍼유저에게 이 질문을 했지만 아무런 도움도 받지 못했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변1

@Anthon이 제안한 것처럼 이것은 Bash나 Dash와 같은 "일반적인" *nix 셸이 아니라 애플리케이션별 프롬프트입니다 q(POSIX 내장 유틸리티예를 들어). 잠깐 살펴보면man crash마지막 명령의 종료 코드를 가져오는 명령이 없는 것 같습니다.

답변2

죄송합니다. 원래 질문을 오해했습니다.

대답은 '아니오'입니다. 크래시 유틸리티 명령이 성공적으로 완료되었는지 알 수 있는 방법이 없습니다. 명령을 실행하기 위해 호출되는 함수는 void 함수입니다. 예를 들어 "bt" 명령은 다음과 같이 선언됩니다.

무효 cmd_bt(void) { ... }

답변3

@l0b0이 이미 밝혔듯이 이것은 쉘이 아닙니다 normal. 그 외에는 echo프롬프트에 입력할 수 있는 명령으로는 작동하지 않는 것 같습니다. 비교하다:

crash -h bt

그리고

crash -h echo

0메시지에 따라 시도하면 아마도 동일한 결과를 얻을 수 있습니다 crash>.

spam ?0

답변4

크래시 유틸리티의 "bt" 명령은 시스템 호출이나 예외를 통해 특정 작업이 커널 모드에 마지막으로 진입한 시간에 대한 스택 추적을 제공합니다. 더 이상 존재하지 않는 작업(즉, 이전에 bash 셸에서 실행된 작업)의 상태에 대한 개념이 없습니다.

관련 정보