나는 한 가지 방법을 알고 있습니다 ./filename.sh > log.txt
. 그러나 를 사용하여 파일을 실행하면 로그 파일에는 콘솔에 표시된 내용이 포함됩니다 ./filename.sh
.
백그라운드 프로세스는 로그 파일에 표시되지 않습니다. "백그라운드 프로세스"란 컴파일러가 각 행을 평가하는 방법을 의미합니다("디버깅"이 적절한 단어인 것 같습니다).
이 백그라운드 프로세스를 로그 파일에 어떻게 넣을 수 있나요?
답변1
귀하의 의견을 토대로:
.sh 파일을 실행할 때 bash가 쉘 스크립트의 각 줄을 어떻게 실행하는지 알고 싶습니다.
bash를 사용하는 경우 찾고 있는 것은 다음과 같습니다.
bash -x ./filename.sh
또는
bash -x ./filename.sh > log.txt
또는 다음을 추가할 수 있습니다.
set -x
콘텐츠 filename.sh
.
답변2
스크립트 상단(Shebang 뒤)에 다음 줄을 추가합니다.
exec >/path/to/log.txt
스크립트의 STDOUT을 로 리디렉션합니다 /path/to/log.txt
.
STDOUT 및 STDERR을 모두 리디렉션하려는 경우:
exec >/path/to/log.txt 2>&1
아니면 그냥 STDERR:
exec 2>/path/to/log.txt
이제 로그 파일은 스크립트가 포그라운드에 있는지 또는 백그라운드에 있는지에 관계없이 STDOUT(및/또는 STDERR)을 갖게 됩니다.