터미널에서 실행하려는 이전 명령의 터미널 출력(stderr 및 stdout)

터미널에서 실행하려는 이전 명령의 터미널 출력(stderr 및 stdout)

터미널의 표준 출력과 표준 오류(가능한 경우 사용자가 제공한 표준 입력)를 각 명령에 대한 파일에 저장하려고 합니다.

그래서 다음과 같이 편집 가능한 방식으로 각 명령을 실행하는 트랩 함수를 만드는 것부터 시작했습니다.

shopt -s extdebug

preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND

    eval `history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//"` |& tee ~/recent_output.txt
    return 1 # This prevent executing of original command
}
trap 'preexec_invoke_exec' DEBUG


그리고 위 파일을 저장하고 실행해보세요.

source file.sh

이것은 내가 원하는 것을 수행하지만 다음과 같은 일부 명령이 실행되지 않습니다.

cd ..

그 이유는 파이프가 하위 쉘을 생성한 다음 그 안에 있는 각 명령을 실행하기 때문입니다. 따라서 메인 쉘은 영향을 받지 않습니다.

Bash의 스크립팅 기능도 다음과 같습니다.

script ~/recent_output.txt

exit작동하지만 터미널에서 실행하는 경우에만 출력이 제공됩니다.

그래서 기본적으로 bash 터미널에서 실행된 이전 명령의 출력을 저장/가져오고 싶습니다. 어떤 언어(golang, Python...)로든 도움을 줄 수 있습니다.

관련 정보