为什么 bash 中的路径补全并不总是有效?

为什么 bash 中的路径补全并不总是有效?

TAB对于不同的 bash 环境(不同的安装) ,在 . 之后点击命令行时,我在路径完成方面有不同的行为。这是在哪里处理的?

一个具体的例子:

cmake-D- 参数运行:

cmake -DCMAKE_TOOLCHAIN_FILE=~/x-too<TAB>

它什么也不做。而(注意=和之间的空格~

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-too<TAB> 

完成到

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-tools

在其他系统上,它甚至可以在 = 和 ~ 之间没有空格的情况下工作。

在哪里可以找到相关的配置文件和值?

答案1

Linux 自动补全可与complete.

 ]➬complete -p  cmake
 complete -F _cmake cmake

所以由 _cmake 负责。

]➬type _cmake > cmake.sh

现在只需查看/调试它即可。您可以修改例如 _cmake_mine 并调用来测试它:

. cmake.sh
complete -F _cmake_mine cmake

寻求帮助任何内置的bash命令:

 help complete
 help [[
 help for

答案2

你必须从 开始/etc/profile。查看由此来源的其他文件(.可能使用命令)。

例如在我的 Ubuntu 系统上,

  • /etc/profile源所有 *.sh 文件/etc/profile.d/
  • /etc/profile.d/bash_completion.sh来源/usr/share/bash-completion/bash_completion
  • 该文件:
    • 设置一个完成加载器函数来查找/usr/share/bash-completion/completions/
    • 和来源~/.bash_completion

您需要在各种系统上遵循该路径。也许cmake其中之一的 /usr/share/bash-completion/completions/ 中没有文件。

相关内容