如何使用 bash 自动完成来列出字面名为“=”的目录的内容?

问题描述 投票:0回答:1

例如使用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/\=/

所以它不仅仅是

=
它试图在分词字符上转义,而且它正在重复整个当前单词。

这是一个错误吗?也许是某些预期行为的路径逻辑效应?假设我无法更改目录名称,解决此问题的最佳方法是什么?

bash command-line autocomplete
1个回答
0
投票

我能想到的唯一解决方案是通过符号链接或变量间接使用路径,例如:

用户:/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
© www.soinside.com 2019 - 2024. All rights reserved.