我需要在我的应用程序中解析$PATH
环境变量。
所以我想知道$PATH
中哪些转义字符有效。
我创建了一个名为/bin:d
的测试目录,并创建了一个名为的测试脚本
其中funny
。如果我用绝对路径调用它,它就会运行。
我只是无法弄清楚如何逃避:
$PATH
我试图逃避
带有\
的冒号并将其包装为单个'
和双"
引号。
但总是当我运行which funny
时,它无法找到它。
我正在运行CentOS 6。
答案 0 :(得分:23)
根据POSIX标准,这是不可能的。这不是特定shell的功能,PATH处理是在C库的execvp函数内完成的。没有任何类型的引用。
这就是为什么包含某些字符(任何不在“可移植文件名字符集”中的内容 - 冒号都被特别调用为例)的强烈推荐。
来自SUSv7:
由于
<colon>
在此上下文中是一个分隔符,因此可能在PATH中使用的目录名称不应包含<colon>
个字符。
另见source of GLIBC execvp。我们可以看到它使用strchrnul
和memcpy
函数来处理PATH组件,绝对没有规定跳过或取消任何类型的转义字符。
答案 1 :(得分:9)
看看这个功能
extract_colon_unit
在我看来,这是不可能的。 :
是无条件的
不可避免地用作路径分隔符。
嗯,这至少对 bash 有效。其他炮弹可能会有所不同。
答案 2 :(得分:3)
你可以试试mount
mount /bin:d /bind
PATH=/bind
答案 3 :(得分:-2)
根据http://tldp.org/LDP/abs/html/special-chars.html单引号应该保留所有特殊字符,所以如果不尝试它,我会认为'/ bin:d'可以在$ PATH中工作。