为什么 bash 中的路径完成并不总是有效?

Pat*_* B. 7 command-line bash autocomplete

使用不同的 bash 环境(不同的安装),TAB在 . 这是在哪里处理的?

一个具体的例子:

cmake-D-argument运行:

cmake -DCMAKE_TOOLCHAIN_FILE=~/x-too<TAB>
Run Code Online (Sandbox Code Playgroud)

它什么都不做。而(注意=~

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-too<TAB> 
Run Code Online (Sandbox Code Playgroud)

完成到

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-tools
Run Code Online (Sandbox Code Playgroud)

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

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

gle*_*man 3

你必须从 开始/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/ 中没有文件。