惯用的Unix程序如何检测它们的安装前缀?

Modified on: Fri, 13 Jul 2018 09:34:30 +0800

如果我安装带有非标准前缀的二进制文件,例如/opt/bin/foo,需要来自/opt/share/foo的一些静态文件,它是如何找到它们的?使用相对于可执行文件的反向引用(../share/foo)?在编译时硬编码?

应用程序处理变量安装前缀的惯用方式是什么?所有目录都应该加上前缀吗? (那么/var?)

作者:Alex B

最佳答案

在编译时对这些引用进行硬编码很常见,并且可能提供命令行选项或环境变量来覆盖编译时默认值。程序通常只会记住一个配置文件的位置(通常在/etc下),其中可以覆盖任何编译时默认值。这种方法最适合开源软件,这些软件由构成操作系统的人员编译,作为Linux发行版或BSD端口的一部分。

对于以二进制形式分发的应用程序,通常的方法是从其第0个参数中找到应用程序二进制文件。按照惯例,execve的第零个参数(即argv[0])是二进制文件的路径(它取决于调用者,通常是shell,以遵守约定)。如果argv[0]不包含任何/,则应用程序应在其上执行$PATH查找。

作者:Gilles

相关问答

添加新评论