.png)
터미널의 표준 출력과 표준 오류(가능한 경우 사용자가 제공한 표준 입력)를 각 명령에 대한 파일에 저장하려고 합니다.
그래서 다음과 같이 편집 가능한 방식으로 각 명령을 실행하는 트랩 함수를 만드는 것부터 시작했습니다.
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...)로든 도움을 줄 수 있습니다.