命令完成时防止窗格/窗口关闭 - tmux

Ste*_*tew 43 tmux

在我的tmux.conf文件中,我将其配置为打开窗口、命名它们、设置窗格等。等等。

但是,我遇到的一个问题是,如果其中一个窗格启动了一个命令,比如说ls,那么该窗格会在命令完成后(立即)自行关闭。有什么办法可以防止这种行为吗?或者在命令完成后它会降到正常的shell?

我假设我需要在窗格启动时启动一个 shell -> 执行命令,但如果我能弄清楚如何做,我会被诅咒的。我为这个问题搜索了一些谷歌,但没有找到。

Cal*_*leb 32

你有几个选择。

  1. 不要ls在您的窗口中运行,而是运行一个 shell,然后发送 shell 按键来执行:

    tmux start-server  
    tmux new-session -d -s session  
    tmux new-window -t session:1  
    tmux send-keys -t session:1 ls C-m
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您可以使用一系列命令,在其他命令运行后留下一个 bash shell:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'ls;bash -i'
    
    Run Code Online (Sandbox Code Playgroud)
  3. 有关在进程退出后使窗格保持活动状态的选项的详细信息,请参阅jasonwryan 的回答remain-on-exit以便您可以查看输出。

  4. 如果某个命令的输出值得一看,那么它可能值得刷新。如果您正在监视某些东西的输出,则可以watch定期获取新输出。这应该可以很好地与 中的窗格配合使用tmux

    tmux start-server  
    tmux new-session -d
    tmux new-window 'watch -n 60 ls'
    
    Run Code Online (Sandbox Code Playgroud)

  • #1 的优点是该命令保留在 shell 历史记录中并且可以轻松地重新执行。如果命令又大又难看,那么这非常有帮助。 (2认同)

jas*_*yan 15

您可以使用该remain-on-exit选项:

退出时保持[on | off]
设置了此标志的窗口在其中运行的程序退出时不会被销毁。可以使用 respawn-window 命令重新激活该窗口。

为了简化重生过程,您可能希望将其绑定到一个键:

bind-key R respawn-window
Run Code Online (Sandbox Code Playgroud)

这将确保您在程序退出时不会留下死窗口。

  • 可以使用```tmux set-option continue-on-exit on```从命令行进行设置 (2认同)