TMUX:如何使新窗口停留时,启动 shell 命令退出?

qyzbxkaa  于 12个月前  发布在  Shell
关注(0)|答案(6)|浏览(107)

在tmux命令模式下,以下命令创建新窗口并在其中打开Vim:

:new-window vim

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

uklbhaso

uklbhaso1#

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

tmux set remain-on-exit on
yyyllmsg

yyyllmsg2#

我知道这是一个死了很久的问题。但我是tmux的最近用户,我有同样的问题。事实证明,你可能想这样做:

tmux new-session bash -l

这会给你一个bash窗口(登录shell)。然后,运行你想要的任何命令。当他们完成后,他们返回到命令提示符,就像你期望的那样。我想很多人都在寻找一种类似于屏幕的互动行为。这是一个简单的方法做到这一点。

i1icjdpr

i1icjdpr3#

我使用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
wmtdaxz3

wmtdaxz34#

把@Jo So的好评论移到一个单独的答案。
一旦第一个ls -la完成,此命令将下降到shell:tmux new-window "/bin/sh -c 'ls -la; exec bash'"

htrmnn0y

htrmnn0y5#

如果您打算在新窗口中正常退出进程(如正确退出),那么tmux new-window "vim ; exec bash"基本上是可以的。
但是,如果您打算通过系统中断(例如SIGINT)退出新进程。你必须使用trap
tmux new-window "bash -c 'trap \"bash\" INT; tail -f foo'"

sbdsn5lh

sbdsn5lh6#

如果您只是想创建一个新窗口并在其中运行一个命令,这可能会更好

new-window \; send-keys 'vim' Enter ;\ last-window

相关问题