退出通过编写 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")'

相关内容