使用 OpenSSH 1:6.2p2-6ubuntu0.1 的 SCP 上的 Tab 补全功能中断

使用 OpenSSH 1:6.2p2-6ubuntu0.1 的 SCP 上的 Tab 补全功能中断

以下是我的情况:

我想转移~/foo.txt到服务器aoneill@bar

我开始在命令行中输入:

aoneill@aoneill-Laptop:~$ scp fo

此时,我按下 来<tab>完成文件名,我的终端就冻结了。它不会根据任何按键而改变,并且光标只是卡在 旁边fo,除非我<ctrl-C>退出。

我正在运行 Ubuntu 13.10,并且我确实将其包含. /etc/bash_completion在我的.bashrc.

这是我真正遇到此问题的唯一程序,而且它似乎不是一个常见问题。

谢谢您的帮助!

答案1

这时我点击tab完成文件名,...

…还有电脑,完全读不懂你的想法,做了什么实际上tab达到该点时,即尝试完成主机名,可能要咨询从 的输出avahi-browse到 的输出的各种事情ruptime。这个过程可能需要一些时间。

(勇敢者可以去看一下_known_hosts_real中的函数/usr/share/bash-completion/bash-completion。)

完成文件名此时,你输入的单词必须包含斜杠 ( /) 字符,或者以点 ( .) 或波浪符号 ( ~) 字符开头。

(勇敢者同样可以从中_scp的功能看出这是为什么/usr/share/bash-completion/completions/scp。)

答案2

我在使用 Ubuntu 14.04 时遇到了这个问题。使用 set -x 显示自动完成功能在 ruptime 上挂起。当我尝试自己运行 ruptime 时,我发现它没有安装。安装 rwho 包后,挂起问题得到解决。

sudo apt-get 安装 rwho

COMPREPLY+=($( compgen -W         "$( ruptime 2>/dev/null | awk '!/^ruptime:/ { print $1 }' )"         -- "$cur" ))
+++ ruptime
+++ awk '!/^ruptime:/ { print $1 }'

COMPREPLY 行调用 ruptime 而不检查它是否存在。由于我启用了“COMMAND_NOT_FOUND_INSTALL_PROMPT=1”,该命令会尝试询问我是否要安装它,但管道会捕获输出并挂起。

因此,错误可能是 COMMAND_NOT_FOUND_INSTALL_PROMPT 没有检查它是否在管道中使用。或者 COMPREPLY 没有先检查命令是否已安装。

发布了与命令未找到组相关的错误。https://bugs.launchpad.net/command-not-found/+bug/1534175

相关内容