Bash 또는 다른 쉘의 기록이 인수일 때 평가된 명령의 출력을 저장하는 방법이 있습니까?
$ echo $(pwd) && history
/root
0 I want something like:
1 echo $(pwd) && history
2 echo /root && history
VS
$ echo $(pwd) && history
/root
0 echo $(pwd) && history
답변1
이는 ZSH에서 가능하지만 문제가 있으므로(아래 참조) 사용해서는 안 됩니다.
zshaddhistory() {
local cmd newcmd
cmd=${1%%$'\n'}
newcmd=${(e)cmd}
if [[ $newcmd != $cmd ]]; then
print -sr -- $cmd
print -sr -- $newcmd
return 1
else
return 0
fi
}
기본적으로 잠재적인 기록 추가에서 암시적 개행을 제거한 다음 e
명령을 새 문자열로 확장합니다. 이로 인해 어떤 일이 발생하면 원래 명령과 새 명령에 대해 사용자 정의 기록 추가가 수행됩니다. 그렇지 않으면 일반 기록 메커니즘이
return 0
명령을 기록에 추가합니다.
하지만! C 또는 LISP 매크로 코드를 두 번 실행하는 문제와 유사한 확장 기능에 부작용이 있는 경우 $(...)
이 솔루션이 문제가 됩니다 . 따라서 간단한 카운터가 잘못되는 것과 같은 디버깅 문제를 좋아하지 않는 한 프로덕션 용도로 권장하지 않습니다.
% i=0
% print $((i++))
1
% print $((i++))
3
% print $((i++))
5
% print $((i++))
7
또는 출력 파일에 여러 번 기록합니다.