특히 Firefox를 시작하는 스크립트를 작성하고 해당 스크립트를 두 번 클릭하고 "터미널에서 실행"을 선택했지만 쉘이 종료되면 Firefox가 즉시 종료되었습니다.
이런 일이 발생하지 않도록 하려면 어떻게 해야 합니까?
답변1
nohup
launch 명령 앞에 넣어야 하므로 firefox
다음과 같아야 합니다.
>$ nohup firefox
답변2
또한, Firefox를 전경이 아닌 배경 작업으로 실행해야 합니다. 왜냐하면 쉘은 부모이고 프롬프트를 반환하기 전에 Firefox가 실행되고 종료될 때까지 기다리기 때문입니다.
답변3
온라인에서 찾을 수 있는 대부분의 솔루션은 Firefox의 스크립트를 서브셸에서 실행합니다. 서브셸이 종료되면 제어권을 다시 얻습니다. Firefox 스크립트가 백그라운드에서 실행되면 해당 변경 사항과 변수 설정이 표시되지 않으며 상위 셸(실제 셸)이 종료되어도 백그라운드에서 계속 실행될 수 있습니다.
그 주된 이유는 bash를 포함한 쉘이 둘 사이에 매우 명확한 차이점이 있기 때문입니다.
- 대화형 모드: 프롬프트를 표시하고, 사용자의 명령을 읽고, 루프에서 실행합니다.
- 그리고비대화형 모드: 이 경우 기본적으로 쉘 스크립트를 해석하는 인터프리터 언어로 실행됩니다.
스크립트가 실행된 후(이번에는 Firefox 실행기/래퍼 스크립트) bash를 비대화형 스크립트 모드에서 대화형 스크립트 모드로 변경하는 쉬운 방법은 없습니다.
이것은 가능하지만 내가 아는 한 이에 대한 쉘 지원은 없습니다.
다행히도 목표를 달성하는 데는 까다로운 방법이 많이 있습니다.
- 비대화형 스크립트를 bash의 초기화 파일로 실행할 수 있습니다. 그래서:
bash --bashrc /here/is/what/i/want.sh
. /here/is/what/i/want.sh
자체 인터프리터를 수정하고 다시 실행할 수 있지만 이제는 대화형 모드입니다. 이는 명령을 통해 수행할 수 있습니다exec /bin/bash -i
. 그냥 스크립트 끝에 넣으세요.