Gar*_* Z. 5 command-line ssh arch-linux tmux openssh
在我的 vanila Arch Linux 系统上,我可以使用以下命令发送到本地tmux-session(会话main):
$ tmux send -t main.0 'echo asdf' ENTER
Run Code Online (Sandbox Code Playgroud)
ssh我还可以使用: (仅用于演示,我使用)向远程计算机发送命令localhost:
$ ssh garid@localhost "ls /home"
Run Code Online (Sandbox Code Playgroud)
tmux-session我想从我的终端发送命令remote-machine(如下所示):
$ ssh -t garid@localhost "tmux send -t main.0 'echo asdf' ENTER"
Run Code Online (Sandbox Code Playgroud)
但它输出以下错误:
error connecting to /tmp/tmux-1000/default (No such file or directory)
Connection to localhost closed.
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
在评论中,我们已经确认了预期的命令,
ssh remote "tmux send -t main.0 'echo asdf' ENTER"
Run Code Online (Sandbox Code Playgroud)
...当remote不是本地主机时可以工作。
我们还确认,连接时命令失败的原因是SSH 会话中未设置localhost该变量。TMUX_TMPDIR该环境变量用于tmux确定应在何处创建包含其控制套接字的目录。如果未设置该变量,实用程序将使用/tmp.
当您执行tmuxvia时,该变量将被取消设置ssh,因为该会话是非交互式非登录会话。因此,它不会将~/.config/shell/profile变量设置TMUX_TMPDIR为/tmp. 该文件是由LARBS拉入的,您使用该文件,但我对此一无所知。
您现在有几种可能的前进方式:
没做什么; ssh+命令的预期目标tmux从来都不是本地主机。
确保TMUX_TMPDIR在调用命令时正确设置变量localhost;你可以这样做
ssh localhost "env TMUX_TMPDIR='$TMUX_TMPDIR' tmux send -t main.0 'echo asdf' ENTER"
Run Code Online (Sandbox Code Playgroud)
...但它会假设本地变量的值是其他主机的正确值,因此它不太可能是通用解决方案。无论如何,与sshto连接localhost是一件不寻常的事情,所以不要这样做,而是循环回到第一点并且不做任何事情,或者......
通过修改将 的值重置TMUX_TMPDIR为/tmp本地默认值~/.config/shell/profile(将变量设置为/tmp或完全注释掉赋值);不过,我不知道 LARBS 会如何使用它。