附加到 tmux 会话并运行命令

附加到 tmux 会话并运行命令

当我附加到会话时,如何在 Tmux 中运行命令?

我想要附加并立即运行命令。

我阅读了文档,但发现只发送密钥,这不适合我的需要。

答案1

您可以附加到正在运行的 tmux 会话并生成一个运行特定命令的新窗口:

tmux attach \; new-window vim

请注意,这不会在预先存在的窗口中生成 vim - 没有执行此操作的工具,这实际上没有意义:正如@Falcon Momot 指出的那样,现有窗口可以运行任何内容,这是发出问题的唯一方法命令是“发送密钥”。

答案2

我正在寻找解决这个问题的方法。可以使用“set-buffer”和“paste-buffer”命令来完成

tmux att -t <session-name> \; set-buffer "<command>^M" \; paste-buffer

这是一个完整的例子:

# let's start with two sessions running bash
tmux new -s theOtherSession \; detach
tmux new -s astropanic \; rename-window main-window \; detach

# attach to the 'astropanic' session, run a directory listing, output
# current datetime, then detach. Note for carriage return (^M) type ^V^M
tmux att -t astropanic \; find-window main-window \; set-buffer "ls;date^M" \; paste-buffer \; detach

# reconnect to check status
tmux att -t astropanic

答案3

我不清楚您想要运行哪种命令,tmux 命令还是 shell/OS 命令。下面是每个的示例:

#!/bin/bash

cd

# give the session a name; makes it easier to reuse code lines
_SNAME=Generic

# start a whole new tmux session
tmux new-session -s $_SNAME -d -x 140 -y 35

# can set tmux options
tmux set-option -t $_SNAME default-path /opt/foo/build

# create a new window that's just a shell
tmux new-window -t $_SNAME -n build -d

# create a new window that's running a program
tmux new-window -t $_SNAME -n vim -d vim

这使得会话处于未附加状态。如果您也想附加它,请在 shell 脚本的末尾添加以下行:

# attach to the new session
tmux attach -t $_SNAME

答案4

这是一个启动或附加到 Tmux 并在其中运行命令的小脚本。一旦命令被执行,它将退出 Tmux。

#!/bin/sh -x
SESSION_NAME=foo

tmux has-session -t $SESSION_NAME 2>/dev/null
if [ $? -ne 0 ]
then
  tmux new-session -d -s $SESSION_NAME "$*"
fi
exec tmux attach -t $SESSION_NAME

使用示例:

$ ./script-above 'echo hello world && sleep 10'

相关内容