例如使用Tab自动补全,带有相对路径:
用户:~$ ls -la /foo 总计 0 drwxr-xr-x 3 root root 60 十一月 9 22:31 。 drwxr-xr-x 1 根根 260 十一月 9 22:31 .. drwxr-xr-x 5 root root 100 十一月 9 22:31 '=' 用户:~$ cd /foo 用户:/foo$ ls =Tab 用户:/foo$ ls =\=/
它会在最初的
Tab按键中插入一个虚假的
=
,这是一个无效路径,并且永远不会列出任何结果:
ls:无法访问'==/':没有这样的文件或目录
(当然,除非有人厚颜无耻地命名一个目录
==
。可笑,IMO。)
尝试使用绝对路径对于理解这个巫毒的人来说可能会更具启发性:
用户:/foo$ ls /foo/=Tab 用户:/foo$ ls /foo/=/foo/\=/
所以它不仅仅是
=
它试图在分词字符上转义,而且它正在重复整个当前单词。
这是一个错误吗?也许是某些预期行为的路径逻辑效应?假设我无法更改目录名称,解决此问题的最佳方法是什么?
我能想到的唯一解决方案是通过符号链接或变量间接使用路径,例如:
用户:/foo$ ln -s = eq 用户:/foo$ ls eq/Tab 用户:/foo$ p='/foo/=' 用户:/foo$ ls $p/Tab
或者从
=
中删除 COMP_WORDBREAKS
(默认为 "'><=;|&(:
):
用户:/foo$$导出COMP_WORDBREAKS=${COMP_WORDBREAKS//=} 用户:/foo$ ls =/Tab