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

Gel*_*ler 38 linux escaping path environment-variables

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

Ran*_*832 24

根据POSIX标准,这是不可能的.这不是特定shell的功能,PATH处理是在C库的execvp函数内完成的.没有任何报价规定.

这就是为什么包含某些字符(任何不在"可移植文件名字符集"中的内容 - 冒号都被特别调用为例)的强烈推荐.

来自SUSv7:

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

另见GLIBC execvp的来源.我们可以看到它使用strchrnulmemcpy函数来处理PATH组件,绝对没有规定跳过或取消任何类型的转义字符.


rod*_*igo 9

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

嗯,这至少对bash有效.其他壳可能会有所不同

  • @PhilippWendler:实际上,链接的仅供参考.我从Archlinux下载了最新的一个 - 运行`makepkg -o`.它是bash-4.2.042,这个功能是一样的. (2认同)

小智 5

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

mount /bin:d /bind
PATH=/bind
Run Code Online (Sandbox Code Playgroud)