我正在跟进本教程用于编写 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")'