将环境变量从另一个脚本导入到当前 shell

将环境变量从另一个脚本导入到当前 shell

我有一个 shell 脚本,它设置一些环境变量,我通过命令运行这些变量source来影响当前的 shell。我创建了另一个引用此 shell 脚本的 shell 脚本,并且我认为source在另一个 shell 脚本内调用与直接在当前 shell 上调用具有相同的效果,但显然情况并非如此。是否有办法告诉这个调用者脚本,无论适用于它运行的 shell 的内容都应该反映到当前 shell 中?

带有环境变量的脚本以开头,set -a所以我想做类似的事情

$(cat env_script.sh)

会将所有内容导出到调用 shell,但这似乎也不起作用。

答案1

您的方法不起作用有两个原因。

首先,我们假设您的 env_script.sh 包含一条设置变量的语句,例如

X=5

如果执行该语句

$(cat env_script.sh)

您要求 bash 作为命令运行此脚本的内容,即执行具有有趣名称的程序X=5

因此,将定义带入 shell 的正确方法是

. env_script.sh

第二个问题是,根据您的写作,您希望将变量传播到“调用者脚本”。现在还不完全清楚“调用者脚本”到底是什么意思,但是如果这个调用者脚本不是反过来采购您将要编写的脚本,但将其作为子进程调用,技术上无法将变量直接传递给调用者。

简而言之,如果 shell 需要设置变量,并且设置是在单独的文件中定义的,则它需要来源命令来导入它们。

答案2

这是一个例子

#!/bin/bash

CURR_DIR=$(dirname $(readlink -f $0))
. ${CURR_DIR}/set-env-script.sh

# Add here your code...

相关内容