如何向远程设备的 tmux-session 发送命令(使用 ssh)

如何向远程设备的 tmux-session 发送命令(使用 ssh)

在我的 vanila Arch Linux 系统上,我可以使用以下命令发送到本地tmux-session(会话main):

$ tmux send -t main.0 'echo asdf' ENTER

ssh我还可以使用: (仅用于演示,我使用localhost)向远程计算机发送命令:

$ ssh garid@localhost "ls /home"

我想从我的终端发送命令tmux-sessionremote-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不是本地主机时可以工作。

我们还有确认的连接时命令失败的原因localhostTMUX_TMPDIRSSH 会话中未设置该变量。该环境变量用于tmux确定应在何处创建包含其控制套接字的目录。如果未设置该变量,实用程序将使用/tmp.

tmux当您执行via时,该变量将被取消设置,ssh因为该会话是非交互式非登录会话。因此,它不会将变量~/.config/shell/profile设置TMUX_TMPDIR/tmp.该文件被拉入拉尔布斯,你使用它,但我对此一无所知。

您现在有几种可能的前进方式:

  1. 没做什么; ssh+命令的预期目标tmux从来都不是本地主机。

  2. 确保TMUX_TMPDIR在调用命令时正确设置变量localhost;你可以这样做

    ssh localhost "env TMUX_TMPDIR='$TMUX_TMPDIR' tmux send -t main.0 'echo asdf' ENTER"
    

    ...但它会假设本地变量的值是其他主机的正确值,因此它不太可能是通用解决方案。无论如何,与sshto连接localhost是一件不寻常的事情,所以不要这样做,而是循环回到第一点并且不做任何事情,或者......

  3. 通过修改将 的值重置TMUX_TMPDIR为本地默认值(将变量设置为或完全注释掉赋值);不过,我不知道 LARBS 会如何使用它。/tmp~/.config/shell/profile/tmp

相关内容