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


33

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

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

我假设在窗格启动时需要启动shell-> execute命令,但是如果我想出了办法,该死的。我已经用谷歌搜索了一下这个问题,但很快就解决了。

Answers:


22

您有两种选择。

  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
    
  2. 您可以在一系列命令中吃午餐,以便在其他命令运行后不使用bash shell:

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

  4. 如果某个命令的输出值得一看,那么可能值得刷新。如果您正在监视某些内容的输出,则可以watch定期获取新的输出。这在tmux以下窗格中应该可以很好地发挥作用:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'watch -n 60 ls'
    

谢啦!很棒的答案,数字2和数字4正是我在努力的目标,但是数字1似乎也是一个不错的选择。感谢您提供的所有帮助,(你们俩)都非常感激。

1
#1的优点是该命令保留在Shell历史记录中,并且可以轻松地重新执行。如果该命令又大又丑,那么这将非常有帮助。
goertzenator 2013年

1
它在没有start-server命令的情况下为我工作,我认为它会在需要时自动启动。仍然显式调用它有好处吗?
luator

1
@luator我认为tmux自从我写了这个答案以来,如果没有找到自动启动服务器,可能已经添加了。我不知道您的版本是否在必要时生成服务器进程有任何优势。
卡雷布(Caleb)

13

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

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

为了简化重生过程,您可能需要将其绑定到键:

bind-key R respawn-window

这样可以确保程序退出时不会死窗。


我到了那里!我没时间了,决定必须修改答案。是的,这是第三个选项,主要缺点是它留下一个只读窗口,您必须重新创建它才能重复使用。
卡莱布(Caleb)

好点子。我已经更新了(半)解决方法。
jasonwryan 2011年

它适用于窗格吗?
azmeuk

1
可以通过tmux set-option remain-on-exit on
rmanna

1
@azmeukset-option -g remain-on-exit on bind-key r respawn-pane
HappyFace

1

这是使用send-keys@Caleb推荐的方法的扩展示例

#!/bin/sh
tmux start-server
tmux new-session -d -n 'mywindowname'
tmux send-keys -t mywindowname 'cd notes' Enter 'vim whiteboard/tasks.md' Enter
tmux new-window -d -n 'secondwindowname' # this -d prevents focus from changing to the new window
tmux -2 attach-session -d
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.