혹시 활용방법이 없을까 궁금했는데역사명령을 실행했지만 성공적으로 실행된 명령만 나열합니다. 마찬가지로 오류를 발생시킨 오류를 나열하는 방법이 있습니까?
각 명령의 종료 상태는 다음과 같습니다.
0
- 명령 실행 성공
1
- 확장 또는 리디렉션 중 오류로 인해 0보다 큰 종료 상태로 명령이 실패했습니다.
2
- 명령이 잘못 사용됨
12
- 명령을 찾았지만 실행할 수 없음
127
- 명령을 찾을 수 없음
다음 명령으로 확인할 수 있습니다echo $?
에서: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
예:
다음 4가지 명령을 실행한 후:
ls
help
lss
ls nonexistentfile
"ls" 및 "help"만 있어야 하는 성공적인 명령(종료 상태 0)만 인쇄하기 위해 테스트를 시도했습니다.
for j in `history | tail -5 | head -4 | cut -d ' ' -f5-`; do $j > cmd_out; if [[ `echo $?` != 0 ]]; then :; else echo $j | grep -v 'bash'; fi; done; rm cmd_out
이 출력은 다음과 같습니다.
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
이는 어느 정도 작동하지만 두 가지 문제가 있습니다.
- 어떤 이유로
grep -v 'bash'
"bash"가 포함된 줄은 제외되지 않지만 이렇게 하면grep 'bash'
"bash"가 포함된 줄만 포함되며 왜 하나는 작동하고 다른 하나는 작동하지 않는지 잘 모르겠습니다. - 각 줄/명령을 문자열로 구분합니다. 마지막
ls
명령은 이어야ls nonexistentfile
하지만 별도의 명령으로ls
실행 중입니다.nonexistentfile
명령에서 무엇을 조정해야 하는지, 어떻게 해야 하는지 아시나요?
답변1
누가 무엇을 했는지 추적하기 위해 공유 계정에 사용한 트릭은 다음과 같습니다.
PROMPT_COMMAND="history -a; sed -i '\$s/\$/ \#$NAME/' $HISTFILE; history -r; $PROMPT_COMMAND"
history
이는 표시하기 전에 기록됩니다 PROMPT
. 실제로는 각 명령 뒤에 기록됩니다. 다음을 사용하여 기록에 종료 코드를 저장하도록 수정할 수 있습니다.
PROMPT_COMMAND="CODE=$?; history -a; sed -i '\$s/\$/ \#\$CODE/' $HISTFILE; history -r; $PROMPT_COMMAND"
이렇게 하면 기록에 다음과 같은 항목이 남습니다.
$ history 2
1271 vim .bashrc #0
1272 history 2
(마지막 항목이 업데이트됩니다.뒤쪽에명령이 history
종료되므로 이 출력에 종료 코드가 표시되지 않습니다. )
이렇게 하면 프롬프트의 기록에 주석이 추가되는 귀찮은 효과가 있습니다.
$ # press up
$ history 2 #0
주석은 일반적으로 실행이나 출력에 영향을 미치지 않지만 편집을 어렵게 만들 수 있습니다.
이제 grep
기록을 사용하여 어떤 코드가 성공적으로 종료되었는지 확인할 수 있습니다.
history | grep '#0$'
# or grep '#[^0]*$' for unsuccessful commands.