配置脚本中硬编码 /usr/bin/env

配置脚本中硬编码 /usr/bin/env

我正在构建一个没有 /usr 目录的 Linux 系统。让工具链工作出奇地容易,但我对很多 auto* 脚本感到恼火:configure 等通常似乎假设env是在/usr/bin.

一种解决方法是在构建过程中进行,但显然这在美观上没有吸引力,并且存在泄漏到最终系统ln -sv .. /usr的路径的风险。 /usr(生产中将会安装一个网络/usr,我什至不希望基本系统知道它的存在。)

我是否安装了错误的自动工具,或者这只是configure经常做出的令人恼火的假设?我不env投入是否违反了 FHS /usr/bin? (这对我来说并不是一个破坏性的事情;我已经通过拥有/inc和 来破坏它了/share。)

答案1

你可能会觉得/usr不美观,但这就是宇宙的运作方式。几乎所有的 Unix 都有/usr/bin/env——据我所知,现存的唯一没有的 Unix 是 SCO OpenServer,而且现存的规模并不大。如果没有/usr/bin/env,您不仅违反了 FHS,而且还违反了一项极为普遍的惯例。/usr/bin/env是一个标准位置,即使该标准没有写入。它并不意味着是一个可配置的位置:/usr/bin/env是每个人都可以假设存在的一个位置。

不管你喜欢与否,解决办法就是安排/usr/bin/env。删除/usr层次结构很好,但如果这样做,请创建/usr一个到 的符号链接/

如果您要/usr通过网络安装,那么:

  • 创建/usr一个包含符号链接的目录bin -> ../bin
  • 确保在您挂载的文件系统上/usr,该文件bin/env是符号链接/bin/env或工作env程序。

答案2

/usr/binenv几乎所有 Linux 和一些 UNIX(包括 OpenBSD)上的位置。许多脚本使用此 shebang 来尊重用户PATHbash, sh, python, perl, ... 设置的位置


更多信息

我是否安装了错误的自动工具,...

我认为需要更多有关“工具链”的信息。

相关内容