Bash 파일의 Bash "스크립트" 명령이요?

Bash 파일의 Bash "스크립트" 명령이요?

bash 스크립트 /usr/bin/local/myscript가 있습니다. 나는 일반적으로 외부 소프트웨어(내 경우에는 Autohotkey)에서 파일을 실행합니다. 기본적으로 스크립트가 즉시 완료되고 창이 닫히므로 창에 로그, 정보 로그 또는 오류 로그가 표시되지 않는다는 의미입니다. . 그래서 나는 프로그램이 제대로 작동하지 않을 경우 디버깅할 수 있도록 전체 실행 단계를 "작성"하는 것을 좋아합니다. 하지만 단순히 script ~/script.txt파일의 첫 번째 줄에 를 넣는 것만 myscript으로는 작동하지 않습니다. 무슨 일이 일어나고 있는지 모르겠습니다. 파일의 다음 줄은 기본적으로 실행되지 않습니다. 그렇다면 bash 파일에서 "스크립트"를 사용하는 (올바른) 방법이 있습니까, 아니면 "스크립트"에 대한 더 나은 대안이 있습니까?

답변1

하지만 단순히 script ~/script.txt파일의 첫 번째 줄에 를 넣는 것만 myscript으로는 작동하지 않습니다. 무슨 일이 일어나고 있는지 모르겠습니다. 파일의 다음 줄은 기본적으로 실행되지 않습니다.

쉘 해석의 경우 myscript외부 script ~/script.txt실행 파일을 실행하는 명령일 뿐입니다. 실행 파일 script의 경우도 마찬가지입니다 .

실행 파일이 또는 인 경우 실행 sleep파일 tarls해석하기 전에 실행 파일이 완료될 때까지 셸이 기다릴 것으로 예상할 수 있습니다 myscript. 즉 script, 셸은 script완료될 때까지 기다립니다.

script대화형 사용을 위한 것입니다. script ~/script.txt해석된 쉘이 아닌 대화형 쉘을 실행합니다 myscript. "창이 닫혔습니다"(가 아닌 경우)라고 썼 으므로 창을 표시하는 일부 터미널 에뮬레이터에서 실행되는 것으로 script가정합니다 . myscript그렇다면 (을 사용하여 script) 이 내부 쉘이 에 의해 시작되는 것을 볼 수 script있으며 쉘이 기다리는 동안 이와 상호 작용할 수 있습니다. script내부 셸에서 수행하는 작업을 문서화하세요. 내부 셸을 종료하면 종료 script되고 셸(예: myscript)이 계속됩니다. 하지만 터미널 에뮬레이터를 닫았을 때 쉘이 SIGHUP을 수신하고 계속하지 않았을 수도 있습니다.

script쉘이 계속 실행되더라도 내부에서 호출하는 것이 myscript디버깅에 도움이 되지 않는다는 것이 이제는 분명해졌으므로 이는 실제로 중요하지 않습니다.myscript

디버깅하는 방법에는 최소한 두 가지가 있습니다 myscript.

  1. 스크립트의 stderr을 로그 파일로 리디렉션합니다. 이 작업은 스크립트에서 수행할 수 있습니다.

    # just after shebang
    exec 2>/path/to/logfile
    

    출력이 표준 출력에서 ​​생성되는 경우 myscript(중요하고 실제로 어딘가(파이프나 리디렉션을 통해)로 이동하는 경우) 출력을 중단하고 싶지 않습니다. 그러나 일반적으로 터미널에 인쇄되고 이를 기록하려는 경우 stderr 및 stdout을 로그 파일로 리디렉션합니다.

    # just after shebang
    exec 2>/path/to/logfile 1>&2
    

    myscript이 방법은 터미널 없이 실행 하는 경우에도 작동합니다.

  2. 또는 스크립트가 bash마지막에 대화형 셸을 실행하도록 합니다(예:). 새 셸은 창이 닫히는 것을 방지하며 지금까지 스크립트가 터미널에 인쇄한 내용을 볼 수 있습니다. 분명히 터미널이 필요합니다. 자체적으로 또는 다른 실행 파일 myscript에서 발생하는 경우에는 ; 이것을 고려하십시오.exitkillexecbash

    어떤 이유로 스크립트에서 시작된 상호 작용으로 인해 bash터미널 등이 지워지면 대신 이를 사용하십시오 sleep 3600. 요점은 실제로 추가 셸이 필요하지 않고 이전 출력을 검사할 수 있도록 터미널 에뮬레이터를 충분히 오랫동안 열어 두는 프로세스가 필요하다는 것입니다.

어떤 방법을 선택하든 당신은

set -x

쉘이 이를 조기에 해석 myscript하고 실행 시 명령과 인수를 인쇄하도록 합니다. 이를 통해 유용한 통찰력을 얻을 수 있습니다.

관련 정보