history 명령 을 사용하는 방법이 있지만 성공적으로 실행 된 명령 만 나열 하는지 궁금합니다 . 마찬가지로 오류를 일으킨 항목을 나열하는 방법이 있습니까?
각 명령의 종료 상태는 다음과 같습니다.
0
-명령 실행 성공
1
-확장 또는 리디렉션 중에 오류로 인해 명령이 실패하고 종료 상태가 0보다 큽니다.
2
-명령 사용법이 잘못
12
되었습니다-명령을 찾았지만 실행할 수 없습니다
127
-명령을 찾을 수 없습니다
http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html echo $?
에서 명령을 진행하여 확인할 수 있습니다 .
예:
이 4 가지 명령을 실행 한 후 :
ls
help
lss
ls nonexistentfile
성공적인 명령 (종료 상태 0) 만 인쇄하도록 테스트를 시도했는데 ‘ls’와 ‘help’만 있어야합니다.
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’가 포함 된 줄을 제외하지는 않지만 ‘bash’grep 'bash'
가있는 줄만 포함하면 왜 하나가 작동하고 다른 것이 작동하는지 잘 모르겠습니다. - 각 줄 / 명령을 문자열로 구분합니다. 마지막
ls
명령은해야
ls nonexistentfile
하지만, 실행의ls
와nonexistentfile
별도의 명령으로.
내가 명령에서 무엇을 조정해야하는지 또는 어떻게해야하는지에 대한 아이디어가 있습니까?
답변
이것은 내가 누가 무엇을했는지 추적하기 위해 공유 계정에서 한 번 사용한 해킹입니다.
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.