PROMPT_COMMAND를 사용한 마지막 명령의 종료 상태

PROMPT_COMMAND를 사용한 마지막 명령의 종료 상태

마지막 명령 실행의 종료 상태를 저장하고 싶지만(파일, 변수, 상관없음) 이 작업은 대화형 셸에서 자동으로 수행되어야 하며 유사한 명령을 수동으로 실행하는 것은 var=$?옵션이 아닙니다.

PROMPT_COMMAND나는 이 작업에 그것을 사용하기로 결정했습니다 . 아래에서 제가 시도한 것이 작동하지 않는다는 것을 보여주는 것을 볼 수 있습니다.

/home/exit_status$ export PROMPT_COMMAND="echo $?"                           
0                                                                   
/home/exit_status$ rm /                                                      
rm: cannot remove ‘/’: Is a directory                               
0                                                                   
/home/exit_status$ echo $?                                                   
1                                                                   
0

위의 코드 조각이 예상대로 작동하도록 하려면 어떻게 해야 합니까? 보관하는 방법을 알아낼 수 있으므로 도움이 필요하지 않습니다. 나는 맥락을 제공하기 위해 이것을 언급했습니다.

답변1

큰따옴표를 사용했기 때문에 $?값을 할당할 때 확장됩니다. 다음을 사용하여 이를 확인할 수 있습니다 set -x.

$ PROMPT_COMMAND="echo $?"
+ PROMPT_COMMAND='echo 0'
++ echo 0
0

큰따옴표를 작은따옴표로 변경하면 원하는 동작을 얻을 수 있습니다.

$ PROMPT_COMMAND='echo $?'
+ PROMPT_COMMAND='echo $?'
++ echo 0
0

$ set +x
+ set +x
0
$ ls nofile
ls: cannot access 'nofile': No such file or directory
2

답변2

명령 다음에 var에 넣으십시오.

/home/exit_status$ export PROMPT_COMMAND="echo $?"                           
0                                                                   
/home/exit_status$ rm /                                                      
rm: cannot remove ‘/’: Is a directory                               
0                                                                   
/home/exit_status$ u=$?                                                   
0
/home/exit_status$ echo $u
1                                                
0
  • $u재설정될 때까지 호스트 상태를 유지합니다.
  • 모든 명령이 덮어쓰기 u=$?때문에 삽입할 수 없습니다 .PROMPT_COMMAND$u
  • 그런데 이것이 스크립트에서 작동하는지 잘 모르겠습니다.

관련 정보