bash_history는 평가된 명령 출력을 저장할 수 있습니까?

bash_history는 평가된 명령 출력을 저장할 수 있습니까?

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

또는 출력 파일에 여러 번 기록합니다.

관련 정보