c - 在 Linux 上解析 $PATH 时我们必须考虑哪些极端情况?

标签 c linux posix environment-variables glibc

我正在开发一个 C 应用程序,该应用程序必须遍历 $PATH 才能找到二进制文件的完整路径名,并且唯一允许的依赖项是 glibc(即不能调用类似的外部程序)。在正常情况下,这只需要用冒号拆分 getenv("PATH") 并逐个检查每个目录,但我想确保涵盖所有可能的极端情况。我应该注意什么问题?特别是,是否允许相对路径、以 ~ 开头的路径扩展为 $HOME 或包含 : 字符的路径?

最佳答案

曾经让我吃惊的一件事是PATH中的空字符串表示当前目录。 PATH 末尾或开头的两个相邻冒号或冒号表示包含当前目录。这记录在 man bash 中例如。

它也在 POSIX specification 中.

所以

PATH=:/bin
PATH=/bin:
PATH=/bin::/usr/bin

都表示当前目录在PATH

关于c - 在 Linux 上解析 $PATH 时我们必须考虑哪些极端情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7121753/

相关文章:

c - 如何跟踪二进制文件中的项目

linux - 如何使用fuse挂载远程计算机中的目录?

c - 在嵌入式系统中使用setcontext()、getcontext()

postgresql - 是否有 #define 来确定读取对齐的 64 位值是否是原子的?

c - 霍夫曼树触发断点

计算给定字符集的所有组合,用于暴力匹配?

linux - WMI 在 LINUX 中设置变量?

c - 将sizeof()的结果分配给ssize_t

c++ - GCC 编译器上 bool 类型的 C 和 C++ 语言的默认初始值设定项是 64 而不是 0。这是编译器错误?

linux - 无密码 ssh 到 sudo 帐户