TMUX:如何在启动shell命令时停止新窗口?

时间:2011-03-15 12:18:13

标签: shell tmux

在tmux命令模式下,以下内容创建新窗口并打开内部的vim:

:new-window vim

当您退出vim时,窗口也会关闭。有没有办法让它留下来?

5 个答案:

答案 0 :(得分:17)

tmux有一个选项:remain-on-exit

tmux set remain-on-exit on

答案 1 :(得分:3)

我意识到这是一个长期存在的问题。但我是tmux的最近用户,我有同样的问题。事实证明你可能想要这样做:

tmux new-session bash -l 

这会让你获得一个bash窗口(登录shell)。然后,运行您想要的任何命令。当它们完成后,它们会像您期望的那样返回命令提示符。我想很多人都在寻找一种互动的“屏幕”式行为。这是一种简单的方法。

答案 2 :(得分:1)

我使用send-keys,以便将命令“键入”shell。这是我的get.all脚本,它会激活许多命令,其中一些命令在完成后我可能需要与之交互(而我不需要的那些命令exit):

#!/bin/sh
tmux att -t get ||
tmux \
  new -s get -n emacs \; \
  send-keys 'get.emacs' C-m \; \
  neww -n git \; \
  send-keys 'get.git' C-m \; \
  neww -n mini \; \
  send-keys 'get.mini' C-m \; \
  neww -n port \; \
  send-keys 'get.port' C-m \; \
  neww -n rakudo \; \
  send-keys 'get.rakudo' C-m \; \
  neww -n neil \; \
  send-keys 'get.neil && get.neil2 && exit' C-m \; \
  neww -n red \; \
  send-keys 'get.red && exit' C-m \; \
  neww -n cpan \; \
  send-keys 'get.cpan && exit' C-m \; \
  selectw -t emacs

答案 3 :(得分:1)

将@Jo So的好评论添加到一个单独的答案中。

第一个ls -la完成后,此命令将落入shell: tmux new-window "/bin/sh -c 'ls -la; exec bash'"

答案 4 :(得分:0)

如果您打算在新窗口中正常退出该进程(如正确退出),那么 tmux new-window "vim ; exec bash" 基本上没问题。

但是,如果您打算通过系统中断(例如 SIGINT)退出新进程。您将不得不使用 trap

tmux new-window "bash -c 'trap \"bash\" INT; tail -f foo'"