如何逃避冒号(:) $ PATH在UNIX?(How to escape colon (:) in

2019-07-19 04:17发布

我需要解析$PATH环境变量在我的应用程序。 所以我想知道什么转义字符将是有效的$PATH 。 我创建了一个名为test目录/bin:d并创建了一个测试脚本funny里面。 它运行,如果我有绝对路径调用它。 我只是无法弄清楚如何逃脱:$PATH我试图逃避结肠\和包成一个'"引号,但总是当我运行。 which funny无法找到它我跑。 CentOS 6的。

Answer 1:

为此,根据POSIX标准是不可能的。 这不是一个具体的外壳的功能,PATH处理在C库中的函数execvp内完成。 没有规定任何类型的引用的。

这就是为什么包括某些字符的原因(任何未在“移植文件名字符集” - 结肠是专门叫了一声为例)强烈建议反对。

从SUSv7 :

由于<colon>是在这种背景下的隔板,可能在路径中使用的目录名称不应该包括一个<colon>字符。

又见GLIBC execvp的来源 。 我们可以看到它使用了strchrnulmemcpy功能,用于处理路径成分,完全没有规定跳过或进行反向转义任何转义字符。



Answer 2:

综观功能extract_colon_unit在我看来,这是不可能的。 的:无条件和不可避免用作路径分隔符。

好了,这是有效的,至少对于bash。 其他炮弹可能会有所不同。



Answer 3:

你可以尝试mount荷兰国际集团它

mount /bin:d /bind
PATH=/bind


Answer 4:

据http://tldp.org/LDP/abs/html/special-chars.html单引号应该保护所有的特殊字符,所以没有尝试的话,我会认为“/ bin中:d”会工作(含)的$ PATH。



文章来源: How to escape colon (:) in $PATH on UNIX?