以下是我的情况:
我想转移~/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