使用.env文件运行shell脚本

Ton*_*ony 12 unix linux shell command

我是在UNIX/Linux中运行脚本的新手.我有一个包含环境信息的.env文件和一个包含该环境的文件夹创建等的.sh脚本.

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

它会像以下一样简单:

bash 'scriptname.sh' 'filename.env'
Run Code Online (Sandbox Code Playgroud)

hek*_*mgl 13

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

source 'filename.env' && bash 'scriptname.sh'
Run Code Online (Sandbox Code Playgroud)

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

(source 'filename.env' && bash 'scriptname.sh')
Run Code Online (Sandbox Code Playgroud)

  • 你不是还需要事先“set -a”吗?否则,环境变量将不会被导出,并且脚本“scriptname.sh”将无法访问其中的任何变量。为什么这个被投票/我错过了什么? (13认同)
  • @phil294 这要看情况。通过阅读这个问题,我觉得 env.sh 确实已经使用了“export”。如果它只是设置变量但不导出它们,那么“set -a”可能是一个选项。好吧,它会导出调用脚本中的所有变量,而不仅仅是 env.sh 中的变量,这可能是需要的,也可能不是。 (2认同)

ana*_*thi 8

创建一个文件,其名称可能run_with_env.sh包含以下内容

#!/bin/bash
ENV_FILE="$1"
CMD=${@:2}

set -o allexport
source $ENV_FILE
set +o allexport

$CMD
Run Code Online (Sandbox Code Playgroud)

将权限更改为755

chmod 755 run_with_env.sh
Run Code Online (Sandbox Code Playgroud)

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

./run_with_env.sh filename.env sh scriptname.sh
Run Code Online (Sandbox Code Playgroud)


Ste*_*hen 6

. ./filename.env 
sh scriptname.sh
Run Code Online (Sandbox Code Playgroud)

第一个命令设置env.shell中的变量,第二个将使用它来执行自身.