How to escape colon (:) in $PATH on UNIX?

本秂侑毒 提交于 2019-12-17 18:01:07

问题


I need to parse the $PATH environment variable in my application. So I was wondering what escape characters would be valid in $PATH. I created a test directory called /bin:d and created a test script called funny inside it. It runs if I call it with an absolute path. I just can't figure out how to escape : in $PATH I tried escaping the colon with \ and wrapping it into single ' and double " quotes. But always when I run which funny it can't find it. I'm running CentOS 6.


回答1:


This is impossible according to the POSIX standard. This is not a function of a specific shell, PATH handling is done within the execvp function in the C library. There is no provision for any kind of quoting.

This is the reason why including certain characters (anything not in the "portable filename character set" - colon is specifically called out as an example.) is strongly recommended against.

From SUSv7:

Since <colon> is a separator in this context, directory names that might be used in PATH should not include a <colon> character.

See also source of GLIBC execvp. We can see it uses the strchrnul and memcpy functions for processing the PATH components, with absolutely no provision for skipping over or unescaping any kind of escape character.




回答2:


Looking at the function extract_colon_unit it seems to me that this is impossible. The : is unconditionally and inescapably used as the path separator.

Well, this is valid at least for bash. Other shells may vary.




回答3:


You could try mounting it

mount /bin:d /bind
PATH=/bind



回答4:


According to http://tldp.org/LDP/abs/html/special-chars.html single quotes should preserve all special characters, so without trying it, I would think that '/bin:d' would work (with)in $PATH.



来源:https://stackoverflow.com/questions/14661373/how-to-escape-colon-in-path-on-unix

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!