使用带有特殊符号的PATH变量在bash(Linux)中发生奇怪的自动完成行为 - 撇号(')

时间:2014-02-07 21:53:23

标签: linux bash autocomplete bash-completion

嗯......我很困惑,因为在我的情况下唯一真正的问题是怪异的撇号(')。
情境:根据是否在附加路径中撇号来扩展PATH变量影响单词完成。
示例:我有一个具有适当可执行权限的可执行文件(称为deadbeef),其路径包含2个撇号:
/home/mallniya/hard'n'soft/soft/gnu-linux/portable/deadbeef-0.6.0
特别是对于一个实验我把同一个文件放到另一个目录中:
/home/mallniya/hardnsoftaa/soft/gnu-linux/portable/deadbeef-0.6.0
如果我将第一个路径导出到变量PATH,则bash中将没有自动完成,但在第二种情况下会出现自动完成。当我在导出目录中键入终端的第一个程序字母时 dead[TAB]
在第一种情况下没有完成,但是当我在第二种情况下使用同一个单词的TAB时 - 它起作用 但是如果我在第一种情况下手动输入命令deadbeef - 它也会执行。
此外,whichtype命令都告诉我,两种情况下都存在可执行文件。
那有什么问题?

注意:
我听说链接,使用没有特殊符号的名称和其他解决方案让事情变得简单 - 我对此毫无兴趣并且只是想知道:如果我将来必须在PATH变量中使用这样的特殊符号,我该怎么办? ,使自动完成工作?这是一个错误吗?如果是的话 - 究竟出了什么问题?

2 个答案:

答案 0 :(得分:1)

这是bash中长期存在的错误。请参阅bug-bash邮件列表中的this thread。 (正如线程所示,这个bug在2008年被报告为bash-completion脚本的一个问题,但它实际上是bash本身的一个问题。)

答案 1 :(得分:0)

撇号是shell的特殊字符,用于告诉bash(除其他事项外)不解析$!\等特殊字符。如果您的名称中有一个'的目录,并且您希望它位于PATH中,则需要使用反斜杠转义它们,例如: G。 .../hard\'n\'soft/...

出于这样的原因,强烈建议在文件或目录名称中包含空格,引号或其他特殊字符。