【问题标题】:ssh with command loses tab-completion带有命令的 ssh 丢失制表符完成
【发布时间】:2015-04-23 09:12:20
【问题描述】:

我有一个方便的别名如下:

sshpass -p "the_password" ssh -o StrictHostKeyChecking=no root@192.168.0.123

这将为我提供一种快速登录远程设备的方法,并获得一个包含选项卡完成的命令提示符。

但我总是做的第一件事是cd 到另一个目录。因此,我想将其作为命令添加到行尾,如下所示:

sshpass -p "the_password" ssh -o StrictHostKeyChecking=no root@192.168.0.123 'cd /tmp/Data/fx'

但如果我这样做了,我根本不会得到提示!它只是坐在那里无所事事。接下来,我试图让它给我一个命令提示符,使用这个:

sshpass -p "the_password" ssh -o StrictHostKeyChecking=no root@192.168.0.123 'cd /tmp/Data/fx; /bin/bash -i'

这几乎行得通。

我已更改到正确的目录,并且我有一个命令提示符。但是,我没有任何制表符补全功能,向上箭头也没有显示最新的命令。

我错过了什么?

【问题讨论】:

  • 我怀疑 /etc/inputrc 文件不是通过我的 ssh 方法获取的。
  • 刚刚看到一条评论说 'bind -f /etc/inputrc' 应该可以解决问题。但这似乎没有任何作用。
  • 嗨,尼克,欢迎来到 Stack Exchange 网络。这个问题更像是一个通用的计算问题,而不是与编程相关的问题。我认为您在Super UserUnix and Linux 获得好答案的机会更大。

标签: ssh tabs completion


【解决方案1】:
ssh -o [...] 'cd /tmp/Data/fx; /bin/bash -i'

当您要求 ssh 在远程系统上运行命令时,ssh 通常不会为远程会话分配 PTY(伪 TTY)。没有 TTY 会改变 bash 初始化自身的方式,因此不会启用其行编辑功能。您可以使用 -t 运行 ssh 来请求会话的 tty:

ssh -t -o [...] 'cd /tmp/Data/fx; /bin/bash -i'

如果您不想一直输入,可以将此行添加到本地主机上的“.ssh/config”文件中:

RequestTTY yes

【讨论】:

  • 太好了,谢谢。 -t 选项是我需要的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多