tmux를 스크립팅하여 시작한 명령을 종료한 후 어떻게 쉘로 이동합니까?

tmux를 스크립팅하여 시작한 명령을 종료한 후 어떻게 쉘로 이동합니까?

나는 팔로우하고 있다이 튜토리얼tmux 창 생성을 스크립팅하기 위한 것입니다.

tmux new-window t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp'

때로는 tmux를 시작한 후 myapp을 종료하고 해당 디렉토리의 쉘로 돌아가고 싶지만 대신 이로 인해 창이 완전히 종료됩니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 적어도 하나의 대답에는 셸을 실행하고 해당 셸에서 명령을 실행하는 것이 포함되어 있다고 생각하지만 이를 달성하는 가장 좋은 방법은 확실하지 않습니다.

답변1

tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp; $SHELL'

이전 명령이 종료되면 기본 쉘을 시작합니다(반환 값에 관계없이, 즉 해당 명령을 종료하지 않은 경우에도 마찬가지입니다).

프로세스가 종료되거나 실패한 경우에만 쉘에 드롭하려면 perl(성공한 경우 tmux 창을 닫으려면) 다음을 사용하십시오.

tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp || $SHELL'

답변2

tmuxcd및 명령 을 실행하는 셸이 이미 열립니다 perl. 달리고 싶지 않다면또 다른대화형 세션을 계속하려면(또는 를 사용하지 않고 창이 닫히지 않도록 set-remain-on-exit) 다음을 수행할 수 있습니다.

tmux new-window -t $SESSION:0 -k -n MAIN
tmux send-keys 'cd ~/main/ && perl -Ilib myapp' C-m

생성된 쉘 아래에 또 다른 쉘을 원 tmux하고 해당 쉘이 명령을 실행하고 대화형이 되도록 하려면(나중에 쉘을 실행하는 @n.st 응답과 다름) 다음을 수행할 수 있습니다.

tmux new-window -t $SESSION:0 -k -n MAIN 'bash --init-file <(echo "cd ~/main/ && perl -Ilib myapp")'

bash불완전한 환경이 문제인 경우 다음과 같이 수행하십시오.

tmux new-window -t $SESSION:0 -k -n MAIN 'bash --init-file <(echo "source ~/.bashrc; cd ~/main/ && perl -Ilib myapp")'

관련 정보