【问题标题】:Embed environment variable in executable which is build from configure script在从配置脚本构建的可执行文件中嵌入环境变量
【发布时间】:2020-12-15 14:40:22
【问题描述】:

我可以使用配置脚本在可执行文件中嵌入一些环境变量,以便在启动该可执行文件时自动设置一些特定的环境变量。

例如: 当我们启动python3 可执行文件时,PYTHONPATH 会自动设置。或者在启动 xyz.exe 时,XYZ 变量被设置。

【问题讨论】:

    标签: python linux ubuntu environment-variables configure


    【解决方案1】:

    简单的答案是否定的。您通常不能直接修改二进制可执行文件,或根据正在运行的特定可执行文件设置环境变量。许多工具和程序都有全面的命令行选项,允许您指定它应该如何运行,因此请确保您仔细阅读文档以确保没有预定义的方式来执行您想要的操作。话虽如此,您可以通过一些变通方法复制此功能。

    一种解决方案是显式地export 所有环境变量,以便在您运行可执行文件时始终定义它们。这当然会导致设置很多环境变量,但不能保证它们会被使用。

    如果您想最小化在任何给定时间设置的环境变量的数量,您还可以编写一个别名或函数,以便在运行可执行文件之前设置环境变量。请注意使用不会与PATH 上现有的可执行文件冲突的名称。此解决方案更接近您的问题,因为环境变量仅在执行之前和之后存在。

    python3env() {
        export PYTHONPATH=/some/path
        python3
        unsert YOOT
    }
    
    alias python3env="export PYTHONPATH /some/path;python3;unset YOOT"
    

    当然,这两个示例都会使您的 shell 启动配置变得混乱,并且可能会导致设置很多环境变量而无法保证它们会被使用。

    【讨论】:

    • 谢谢,它可以通过多种方式被破解。我一直在寻找更清洁的解决方案,类似于通过 LDGLAGS 配置脚本。
    • 啊,那不是真的。除非您希望重新编译每个二进制文件并安装它,否则除了使用工具特定的配置文件(如果存在)之外没有“好”的方法。
    • 的想法是编译一个二进制文件并在没有任何安装依赖项的情况下跨发行版发布它。
    猜你喜欢
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2022-06-30
    • 2016-12-23
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多