当我附加到会话时,如何在 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'