TMUX:启动 shell 命令退出时如何使新窗口保持不变?

问题描述 投票:0回答:6

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

:new-window vim

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

shell tmux
6个回答
21
投票

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

tmux set remain-on-exit on

4
投票

我意识到这是一个早已死了的问题。但我是 tmux 的新用户,我也有同样的问题。事实证明您可能想要这样做:

tmux new-session bash -l 

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


2
投票

我使用发送键,以便将命令“键入”到 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

1
投票

将@Jo So 的好评移至单独的答案。

第一个

ls -la
完成后,此命令将落入 shell:

   tmux new-window "/bin/sh -c 'ls -la; exec bash'"


0
投票

如果您打算正常退出新窗口中的进程(如正确退出),那么

tmux new-window "vim ; exec bash"
基本上就可以了。

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

trap

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


0
投票

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

new-window \; send-keys 'vim' Enter ;\ last-window
© www.soinside.com 2019 - 2024. All rights reserved.