Bash 4.2 无法补全目录名称

Bash 4.2 无法补全目录名称

bash系统升级后,我遇到完成问题。

$ mkdir abcde    
$ cd abc[TAB] 

不执行任何操作,而在旧bash版本中它会扩展为$ cd abcde

一些较旧的论坛bash建议设置该direxpand选项,但似乎缺少该选项bash 4.2

$ shopt -s direxpand  
bash: shopt: direxpand: invalid shell option name  

(我已经从 Fedora 11 升级到 Fedora 17 bash-4.2.37

有办法解决这个问题吗?

答案1

bash 使用 readline 库进行输入,tab应该映射到 readlinecomplete操作(这与同名的 bash 命令不同,尽管操作相关)。

可能的原因有多种,需要检查的事项包括:

  • 测试其他补全是否有效:(meta-?可能是++ alt` )这应该列出所有匹配项(类似于按两次)shift?tab
  • 检查是否ctrl-i可以替代(输入标签的另一种方式)
  • 检查你的变量,以及(不应包含任何对标签的引用)TERM的输出stty
  • 检查可以定义哪些 bash 补全功能,运行后complete不带参数列出它们
  • 你的readline可能搞乱了,检查/etc/inputrc和 你的~/.inputrc(如果有的话),以及 的输出bind -q complete。它至少应该包含“ \C-i” 含义ctrl- i(制表符)
  • 检查是否有任何内容破坏了 readline 的 tab 键序列:(bind -S 不应包含“ \C-i”)
  • 如果你运行bind '"\C-i": complete'它是否会开始按预期工作?

答案2

显然 shopt -s direxpand 适用于一切除了内置的“cd”。所以我只需将“别名 xy=cd”添加到我的配置文件中,xy 的工作方式与 cd 相同,只是 direxpand 使用 TAB 工作。(谁会想到它会如此简单?)

相关内容