退出透過寫 tmux 腳本啟動的指令後,如何進入 shell?

退出透過寫 tmux 腳本啟動的指令後,如何進入 shell?

我正在跟進本教程用於編寫 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,在其中執行cdperl命令。如果你不想跑其他在該 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")'

相關內容