编辑#1
到目前为止,“可能的重复”不是重复的。他们测试$FILE
in的存在$PATH
,而不是提供第一个有效结果的完整路径;最佳答案使用bash命令行命令,而不是纯c。
原始问题
在所有 exec 系列函数中,有一些会进行$PATH
查找而不需要执行二进制文件的绝对路径。
来自man exec
:
如果指定的文件名不包含斜杠 (/) 字符,则 execlp()、execvp() 和 execvpe() 函数会复制 shell 在搜索可执行文件时的操作。在 PATH 环境变量中指定的以冒号分隔的目录路径名列表中查找该文件。如果未定义此变量,则路径列表默认为当前目录,后跟 confstr(_CS_PATH) 返回的目录列表。(此 confstr(3) 调用通常返回值“/bin:/usr/bin”。)
是否有一种简单直接的方法来测试第一个“执行的完整路径”将评估为什么,而不必手动遍历$PATH
环境变量中的所有元素,并将二进制名称附加到路径的末尾?我想使用“事实上的标准”方法来估计要运行的二进制文件,而不是重写过去可能已经实施过多次的任务。
我意识到这不能保证,因为有人可能会通过错误的脚本、TOCTOU 攻击等使此检查无效。我只需要一个像样的近似值来进行测试。
谢谢你。