
我正在跟進本教程用於編寫 tmux 視窗建立的腳本。
tmux new-window t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp'
有時我在啟動 tmux 後會殺死 myapp,我想回到該目錄中的 shell,但這會完全殺死視窗。解決這個問題的最佳方法是什麼?我認為至少有一個答案涉及運行 shell 並讓該 shell 運行命令,但我不確定實現這一目標的最佳方法。
答案1
tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp; $SHELL'
當前面的命令終止時,將啟動預設 shell(無論它們的返回值如何,即即使您沒有殺死它們)。
如果您只想在perl
進程被終止或失敗時進入 shell(並在成功時關閉 tmux 視窗),請使用
tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp || $SHELL'
答案2
tmux
已經為您開啟一個 shell,在其中執行cd
和perl
命令。如果你不想跑其他在該 shell 下,為了繼續互動式會話(或封鎖視窗關閉,而不使用set-remain-on-exit
),您可以執行以下操作:
tmux new-window -t $SESSION:0 -k -n MAIN
tmux send-keys 'cd ~/main/ && perl -Ilib myapp' C-m
如果您希望在建立的 shell 下有另一個 shelltmux
並希望該 shell 執行命令並變為互動式(這與隨後運行 shell 的 @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")'