我不知道标签完成是如何工作的,但突然之间我的一切都被打破了。除了用例之外,我甚至不知道提供什么信息。
makefile中有一个目标clean
。
$ make c<tab>
会产生
$ make c23:set: command not found
lean
修改
我相信自从set
说man set
并且No manual entry for set
没有报告任何内容以来我内置了which set
bash。但是,在终端上调用set会产生结果。
我正在使用: GNU bash,版本4.3.11(1)-release(x86_64-pc-linux-gnu)和 GNU Make 3.81 < / p>
答案 0 :(得分:14)
感谢Etan's comment和Aaron指示makefile的位置,我设法调试了这个。
我运行了set -x
,因此我可以跟踪完成标签页时发生的情况。 make c<tab>
的输出主要包含位于make
(1)的/usr/share/bash-completion/completions/make
的bash完成文件中的命令。
但是,我注意到输出和文件之间的不一致。接近尾声时,输出说:
+ local mode=--
+ (( COMP_TYPE != 9 ))
++ set +o
++ grep --colour=auto -n -F posix
+ local 'reset=23:set +o posix'
+ set +o posix
我确定与文件中的这些行对应:
if (( COMP_TYPE != 9 )); then
mode=-d # display-only mode
fi
local reset=$( set +o | grep -F posix ); set +o posix # for <(...)
因此,输出只有grep --colour=auto -n
而不是grep
。实际上,我已为grep
删除别名后立即开始工作。
我希望这有助于其他人调试他们的问题。
编辑:我在此处提交了错误报告:https://alioth.debian.org/tracker/index.php?func=detail&aid=315108&group_id=100114&atid=413095
答案 1 :(得分:2)
查看/etc/bash_completion
,/etc/bash_completion.d
和/或/usr/share/bash-completion/completions
。您应该找到一个文件make
,其中包含按 Tab 时将调用的脚本。
使用Linux发行版的打包系统验证文件(或者可能还原为旧版本)。
另一个原因可能是Makefile中的某些内容,它会将BASH完成脚本中的解析器抛出轨道。
答案 2 :(得分:1)
这里没有尝试获得任何学分,但最好的解决方案实际上有点隐藏在评论中...... 请投票this comment而不是我的答案!
简单的步骤来解决这个问题:
sudo vi /usr/share/bash-completion/completions/make
找到具有grep指令的行。它应该是这样的:
local reset=$( set +o | grep -F posix ); set +o posix # for <(...)
添加&#34; \ &#34;在&#34; grep&#34;之前指令:
local reset=$( set +o | \grep -F posix ); set +o posix # for <(...)