안녕하세요, 명령의 출력과 출력을 생성하기 위해 실행한 명령을 동일한 파일에 저장하고 싶습니다. 나는 그 중 하나를 이해합니다
*some_command* > file.txt
*some_command* | tee file.txt
할 수 있지만 두 경우 모두일부 명령 파일에 저장되지 않고 출력만 저장됩니다. 이를 수행할 수 있는 방법이 있습니까?
답변1
명령을 배열에 저장하고 인쇄하고 실행할 수 있습니다.
# Define command
mycmd=(some_command -o "some option")
# Print command
echo "${mycmd[@]}"
# Run command
"${mycmd[@]}"
이는 명령을 인쇄할 때 따옴표를 제거한다는 점에 유의하십시오.
함수에 넣어보세요:
lognrun(){ echo "$@"; "$@"; }
lognrun some_command -o "some_option" > logfile
답변2
다음 과 함께 서브쉘을 사용하십시오 set -x
.
$ ( set -x; printf '%s\n' a b "c d"; ) 2>&1 | tee logfile
+ printf '%s\n' a b 'c d'
a
b
c d
답변3
"script" 명령을 사용하는 것은 어떻습니까?
$ script logfile
$ somecommand
lots of command output...
그러면 쉘에서 수행하는 모든 작업이 로그 파일에 기록됩니다. 중지하려면 Ctrl+D를 누르세요.
명령이 하나만 필요한 경우 "-c" 옵션을 사용할 수 있습니다.
-c, --command 명령 대화형 셸 대신 명령을 실행하세요. 이를 통해 스크립트는 프로그램의 출력을 쉽게 캡처할 수 있습니다. 표준 출력이 tty가 아닌 경우 동작이 다릅니다.