如何在UNIX上的$ PATH冒号冒号(:)?

我需要parsing我的应用程序中的$PATH环境variables。 所以我想知道在$PATH哪些转义字符是有效的。 我创build了一个名为/bin:d的testing目录,并在其中创build了一个名为“ funny的testing脚本。 如果我用绝对path调用它,它会运行。 我只是无法弄清楚如何逃生:$PATH我试图用\逃避冒号,并将其包装成单引号和双引号,但总是当我运行的时候which funny它找不到它,我正在运行CentOS 6。

Solutions Collecting From Web of "如何在UNIX上的$ PATH冒号冒号(:)?"

根据POSIX标准,这是不可能的。 这不是特定shell的函数,PATH处理在C库中的execvp函数中完成。 没有任何条款可以引用。

这是为什么包含某些字符的原因(不包括“便携文件名字符集”中的任何内容) – 强烈建议使用冒号作为示例。

从SUSv7 :

由于<colon>在此上下文中是分隔符,因此可能在PATH中使用的目录名称不应包含<colon>字符。

另请参阅GLIBC execvp的来源 。 我们可以看到它使用strchrnulmemcpy函数来处理PATH组件,绝对没有提供跳过或不使用任何类型的转义字符的规定。

看看函数extract_colon_unit在我看来,这是不可能的。 :无条件地,不可避免地用作路径分隔符。

那么,这是至少有效的bash 。 其他壳可能会有所不同

你可以尝试mount

 mount /bin:d /bind PATH=/bind