![Linux에서 .sh 파일을 실행할 때 백그라운드에서 무슨 일이 일어나고 있는지 어떻게 확인할 수 있나요? [폐쇄]](https://linux55.com/image/86956/Linux%EC%97%90%EC%84%9C%20.sh%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EB%95%8C%20%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%EC%97%90%EC%84%9C%20%EB%AC%B4%EC%8A%A8%20%EC%9D%BC%EC%9D%B4%20%EC%9D%BC%EC%96%B4%EB%82%98%EA%B3%A0%20%EC%9E%88%EB%8A%94%EC%A7%80%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%99%95%EC%9D%B8%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
나는 한 가지 방법을 알고 있습니다 ./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)을 갖게 됩니다.