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的来源.我们可以看到它使用strchrnul
和memcpy
函数来处理PATH组件,绝对没有规定跳过或取消任何类型的转义字符.
看看这个功能
extract_colon_unit
在我看来这是不可能的.在:
无条件和不可避免用作路径分隔符.
嗯,这至少对bash有效.其他壳可能会有所不同