在bash脚本中使用调试程序分离tmux会话

时间:2016-03-13 17:45:43

标签: bash session scripting tmux

我有一个我想要运行的脚本,我将启动在单独的tmux会话中运行的两个程序。我现在的脚本非常多:

!/bin/bash
tmux new -s test1 'mono --debug program1.exe'
tmux new -s test2 'python program2.py'

我遇到的问题是2个程序在调试模式下运行,因此它们正在主动向tmux会话输出信息。启动程序后,我无法控制在tmux会话中键入任何内容。但是,我可以使用Ctrl + b d方法手动分离会话。我不确定如何在bash脚本中执行此操作。

我找到了tmux detach命令,但由于我不确定如何在程序启动后输入会话并输出调试信息,我无法输入该命令。

我还发现有一篇帖子说有一个-d标志你可以用于tmux,它会启动一个分离的会话,我希望我可以做tmux new -d test1 'mono --debug program1.exe'这样的事情,但那并没有&#39似乎工作。它似乎抱怨-d标志中的语法。

2 个答案:

答案 0 :(得分:2)

要启动两个单独的会话,每个会话运行一个程序或命令,而不附加,请尝试在script.sh中写下这个:

#!/bin/bash

tmux \
    new \
        -d \
        -s test1 \
        'mono --debug program1.exe' \
    \; \
    new \
        -s test2 \
        -d \
        'python program2.py'

说明

  • \用于bash中的行继续,这是一个很好的做法,可以通过让每个选项都在自己的行上来打破其他长命令以更清楚地看到它。
  • \;允许我们在原始的tmux调用中添加另一个tmux命令,而不是从另一个tmux调用表单bash
  • -d运行会话分离。只要它位于new
  • 之后,您可以看到它的位置是灵活的
  • new是别名,是new-session
  • 的缩写

因此,当您运行脚本时,例如

$ ./script.sh

它悄然启动这些tmux会话。你可以检查它们是否存在:

$ tmux ls
test1: 1 windows (created Sun Mar 13 15:19:31 2016) [79x18]
test2: 1 windows (created Sun Mar 13 15:19:31 2016) [79x18]

并附加以查看它们,例如test1

$ tmux attach -t test1

答案 1 :(得分:2)

除了其他选项之外,您只需要为每个-d命令添加new标志。

#!/bin/bash
tmux new -d -s test1 'mono --debug program1.exe'
tmux new -d -s test2 'python program2.py'

请注意,您现在有两个会话,其中一个会议可以附加到tmux attach -s test1tmux attach -s test2。在相同的会话的单独窗口中运行每个命令可能更简单:

tmux new -d -s test1 'mono --debug program1.exe'
tmux new-window 'python program2.py'
tmux attach -t test1

new-window替换为split-window,以便在同一窗口的不同窗格中运行命令。