嗯......我很困惑,因为在我的情况下唯一真正的问题是怪异的撇号(')。
情境:根据是否在附加路径中撇号来扩展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
- 它也会执行。
此外,which
和type
命令都告诉我,两种情况下都存在可执行文件。
那有什么问题?
注意:的
我听说链接,使用没有特殊符号的名称和其他解决方案让事情变得简单 - 我对此毫无兴趣并且只是想知道:如果我将来必须在PATH变量中使用这样的特殊符号,我该怎么办? ,使自动完成工作?这是一个错误吗?如果是的话 - 究竟出了什么问题?
答案 0 :(得分:1)
这是bash中长期存在的错误。请参阅bug-bash
邮件列表中的this thread。 (正如线程所示,这个bug在2008年被报告为bash-completion脚本的一个问题,但它实际上是bash本身的一个问题。)
答案 1 :(得分:0)
撇号是shell的特殊字符,用于告诉bash
(除其他事项外)不解析$
,!
或\
等特殊字符。如果您的名称中有一个'
的目录,并且您希望它位于PATH
中,则需要使用反斜杠转义它们,例如: G。 .../hard\'n\'soft/...
。
出于这样的原因,强烈建议在文件或目录名称中包含空格,引号或其他特殊字符。