Tmux - 在启动时在会话中执行命令

Loc*_*ane 5 bash tmux

我想做的事情真的很简单,但我似乎找不到一个直截了当的答案。

我发现了这个问题这个问题,但它们并不是我所需要的——我没有运行多个会话或窗口或任何类似的东西——我只是想让 tmux 在它自己内部执行一个命令(可能是一个 bash 脚本),打开后。

所以基本上我输入“tmux”,一个会话打开,并且在会话中 tmux 自动执行“hello_world.sh”或类似的东西。

有谁知道如何做到这一点?.tmux.conf 文件似乎没有“发送密钥”,但我可能使用错误。

谢谢大家。

编辑:感谢 JohnKiller 回答了我自己的问题。我没有想到 /root/.bashrc 在登录时运行的事实,以及当 TMUX 打开时。我在其中添加了一个 if 语句,请在下面回答。

Loc*_*ane 5

感谢 JohnKiller 的建议,我意识到 .bashrc 在打开新 tty 和在终端中打开 TMUX 时都会执行。

对于未来的读者:通常会引用 $TMUX 变量来查看 TMUX 是否正在运行,但您也可以使用“pidof tmux”。如果 TMUX 正在运行,$TMUX 变量将填充如下内容:“/tmp/tmux-0/default,27389,0”。

在我的特定情况下,我正在运行 CentOS 6,并将其设置为使用 root 自动登录,因为它只是一个测试映像。我可以通过编辑 /etc/init/tty.conf 来做到这一点:

exec /bin/mingetty --autologin root $TTY
Run Code Online (Sandbox Code Playgroud)

现在它已设置为自动登录,我在 /root/.bashrc 中添加了以下内容:

if [[ `tty` == "/dev/tty1" ]] && [[ -z "$TMUX" ]];then
        tmux
fi
Run Code Online (Sandbox Code Playgroud)

对于阅读本文的新手,这表示“如果我的终端是终端 1,并且 $TMUX 变量的长度为零,则运行 tmux”。

紧随其后的是:

if [[ -n "$TMUX" ]] && [[ ! -e "/root/.automatic_start_occurred" ]];then
        touch /root/.automatic_start_occurred
        /usr/bin/hello_world
fi
Run Code Online (Sandbox Code Playgroud)

再次对于新手,这表示“如果 $TMUX 的长度不为零,并且文件“.automatic_start_occurred”不存在(if 语句中的“!”),则创建文件“/root/.automatic_start_occurred”然后在 /usr/bin 中执行“hello_world”。

这正是我在寻找我的系统要做的事情 - 启动后,TTY1 将弹出 TMUX,而其他 TTY 将保持不变。当TMUX第一次弹出时,它会执行一些任意命令,除非删除“.automatic_startup_occurred”文件,否则永远不会再执行它们。