【问题标题】:Running shell script using .env file使用 .env 文件运行 shell 脚本
【发布时间】:2016-05-22 17:07:06
【问题描述】:

我对在 UNIX/Linux 中运行脚本相当陌生。我有一个包含环境信息的 .env 文件和一个包含该环境的文件夹创建等的 .sh 脚本。

如何在 .env 文件中包含的环境上运行脚本,或者如何将脚本指向目标环境?

会不会这么简单:

bash 'scriptname.sh' 'filename.env'

【问题讨论】:

    标签: linux shell unix command


    【解决方案1】:

    在启动脚本之前,您需要在调用 shell 中获取环境源代码:

    source 'filename.env' && bash 'scriptname.sh'
    

    为了防止污染调用shell的环境,你可以在子shell中运行它:

    (source 'filename.env' && bash 'scriptname.sh')
    

    【讨论】:

    • 你不是也需要set -a吗?否则,环境变量将不会被导出并且脚本scriptname.sh 将无权访问其中的任何一个。为什么这被赞成/我错过了什么?
    • @phil294 这取决于。通过阅读这个问题,我觉得 env.sh 确实已经使用了export。如果它只是设置变量但不导出它们,那么set -a 可能是一个选项。好吧,它会从调用脚本中导出所有变量,而不仅仅是从 env.sh 中导出的变量,这可能需要也可能不需要。
    【解决方案2】:
    . ./filename.env 
    sh scriptname.sh
    

    第一个命令设置环境。 shell中的变量,第二个将使用它来执行自己。

    【讨论】:

    • 我的 .env 文件设置为 VAR=val 行。这为我正确加载了变量。
    【解决方案3】:

    创建一个名称可能为run_with_env.sh 的文件,内容如下

    ENV_FILE="$1"
    CMD=${@:2}
    
    set -o allexport
    source $ENV_FILE
    set +o allexport
    
    $CMD
    

    将权限改为755

    chmod 755 run_with_env.sh
    

    现在使用以下命令运行 bash 文件

    ./run_with_env.sh filename.env sh scriptname.sh
    

    【讨论】:

      猜你喜欢
      • 2017-11-22
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多