【发布时间】:2016-05-22 17:07:06
【问题描述】:
我对在 UNIX/Linux 中运行脚本相当陌生。我有一个包含环境信息的 .env 文件和一个包含该环境的文件夹创建等的 .sh 脚本。
如何在 .env 文件中包含的环境上运行脚本,或者如何将脚本指向目标环境?
会不会这么简单:
bash 'scriptname.sh' 'filename.env'
【问题讨论】:
我对在 UNIX/Linux 中运行脚本相当陌生。我有一个包含环境信息的 .env 文件和一个包含该环境的文件夹创建等的 .sh 脚本。
如何在 .env 文件中包含的环境上运行脚本,或者如何将脚本指向目标环境?
会不会这么简单:
bash 'scriptname.sh' 'filename.env'
【问题讨论】:
在启动脚本之前,您需要在调用 shell 中获取环境源代码:
source 'filename.env' && bash 'scriptname.sh'
为了防止污染调用shell的环境,你可以在子shell中运行它:
(source 'filename.env' && bash 'scriptname.sh')
【讨论】:
set -a吗?否则,环境变量将不会被导出并且脚本scriptname.sh 将无权访问其中的任何一个。为什么这被赞成/我错过了什么?
export。如果它只是设置变量但不导出它们,那么set -a 可能是一个选项。好吧,它会从调用脚本中导出所有变量,而不仅仅是从 env.sh 中导出的变量,这可能需要也可能不需要。
. ./filename.env
sh scriptname.sh
第一个命令设置环境。 shell中的变量,第二个将使用它来执行自己。
【讨论】:
VAR=val 行。这为我正确加载了变量。
创建一个名称可能为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
【讨论】: