![如何向远程设备的 tmux-session 发送命令(使用 ssh)](https://linux22.com/image/210555/%E5%A6%82%E4%BD%95%E5%90%91%E8%BF%9C%E7%A8%8B%E8%AE%BE%E5%A4%87%E7%9A%84%20tmux-session%20%E5%8F%91%E9%80%81%E5%91%BD%E4%BB%A4%EF%BC%88%E4%BD%BF%E7%94%A8%20ssh%EF%BC%89.png)
在我的 vanila Arch Linux 系统上,我可以使用以下命令发送到本地tmux-session
(会话main
):
$ tmux send -t main.0 'echo asdf' ENTER
ssh
我还可以使用: (仅用于演示,我使用localhost
)向远程计算机发送命令:
$ ssh garid@localhost "ls /home"
我想从我的终端发送命令tmux-session
(remote-machine
如下所示):
$ ssh -t garid@localhost "tmux send -t main.0 'echo asdf' ENTER"
但它输出以下错误:
error connecting to /tmp/tmux-1000/default (No such file or directory)
Connection to localhost closed.
我在这里做错了什么?
答案1
在评论中,我们已经确认预期的命令,
ssh remote "tmux send -t main.0 'echo asdf' ENTER"
...当remote
不是本地主机时可以工作。
我们还有确认的连接时命令失败的原因localhost
是TMUX_TMPDIR
SSH 会话中未设置该变量。该环境变量用于tmux
确定应在何处创建包含其控制套接字的目录。如果未设置该变量,实用程序将使用/tmp
.
tmux
当您执行via时,该变量将被取消设置,ssh
因为该会话是非交互式非登录会话。因此,它不会将变量~/.config/shell/profile
设置TMUX_TMPDIR
为/tmp
.该文件被拉入拉尔布斯,你使用它,但我对此一无所知。
您现在有几种可能的前进方式:
没做什么;
ssh
+命令的预期目标tmux
从来都不是本地主机。确保
TMUX_TMPDIR
在调用命令时正确设置变量localhost
;你可以这样做ssh localhost "env TMUX_TMPDIR='$TMUX_TMPDIR' tmux send -t main.0 'echo asdf' ENTER"
...但它会假设本地变量的值是其他主机的正确值,因此它不太可能是通用解决方案。无论如何,与
ssh
to连接localhost
是一件不寻常的事情,所以不要这样做,而是循环回到第一点并且不做任何事情,或者......通过修改将 的值重置
TMUX_TMPDIR
为本地默认值(将变量设置为或完全注释掉赋值);不过,我不知道 LARBS 会如何使用它。/tmp
~/.config/shell/profile
/tmp