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

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

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

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

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

有人知道怎么做吗?.tmux.conf 文件似乎不支持“send-keys”,但我可能用错了。

谢谢大家。

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

答案1

感谢 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

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

if [[ `tty` == "/dev/tty1" ]] && [[ -z "$TMUX" ]];then
        tmux
fi

对于阅读此文的新手来说,这句话的意思是“如果我的终端是终端 1,并且 $TMUX 变量为零长度,则运行 tmux”。

接下来是:

if [[ -n "$TMUX" ]] && [[ ! -e "/root/.automatic_start_occurred" ]];then
        touch /root/.automatic_start_occurred
        /usr/bin/hello_world
fi

同样对于新手来说,这句话的意思是“如果 $TMUX 的长度非零,并且文件“.automatic_start_occurred”不存在(if 语句中的“!”),则创建文件“/root/.automatic_start_occurred”,然后在 /usr/bin 中执行“hello_world”。

这正是我希望我的系统能做到的 - 启动后,TTY1 将随 TMUX 一起弹出,其他 TTY 将保持不变。当 TMUX 第一次弹出时,它将执行一些任意命令,除非删除文件“.automatic_startup_occurred”,否则它永远不会再执行这些命令。

答案2

https://wiki.archlinux.org/index.php/tmux#Autostart_tmux_with_default_tmux_layout

编辑~/.bashrc并添加:

if [ -z "$TMUX" ]; then
    YOUR CODE HERE
fi 

相关内容