현재 터미널을 종료하고 명령을 실행하고 싶습니다. 할 수 있나요?
추신:: 루프를 만들었다고 가정합니다.while true; do bash;done
답변1
적절한 트랩을 사용하여 서브셸에서 실행할 수 있습니다. 예를 들어, echo -e '\nCommand done
끝에서 실행 하려면 while true; do true; done
다음 명령을 사용할 수 있습니다.
mario@mario-K53SV:~$ (trap 'echo -e "\nCommand done"' EXIT; while true; do true; done)
트랩은 서브쉘의 EXIT 이벤트에 정의한 명령을 등록합니다. 서브쉘을 생성하려면 괄호가 필요합니다. 이를 일반화하고 명령을 변수(예: )에 넣으려면 해당 명령을 올바르게 실행 MY_COMMAND='while true; do true; done'
해야 합니다 . eval
이 예제 출력은 사용되는 용도를 정확하게 보여줍니다(eval이 없으면 작동하지 않습니다).
mario@mario-K53SV:~$ YOUR_COMMAND="while true; do true; done"
mario@mario-K53SV:~$ EXECUTE_ON_EXIT="echo -e '\nCommand done'"
mario@mario-K53SV:~$ (trap 'eval ${EXECUTE_ON_EXIT}' EXIT; eval ${YOUR_COMMAND})
^C
Command done
mario@mario-K53SV:~$
자동으로 전원을 끄는 데에도 사용할 수 있습니다.단말기마찬가지로 EXIT 핸들러 명령 끝에는 kill -s SIGHUP $$
핸들러 끝에만 포함하면 됩니다(예 EXECUTE_ON_EXIT="echo -e '\nCommand done'; kill -s SIGHUP $$"
: ).