从文件设置环境变量

我在bash中编写了一个脚本,它用一个文件夹中的3个变量分析文件,这是其中之一:

MINIENTREGA_FECHALIMITE="2011-03-31"
MINIENTREGA_FICHEROS="informe.txt programa.c"
MINIENTREGA_DESTINO="./destino/entrega-prac1"

该文件存储在./conf/prac1中

然后,我的脚本minientrega.sh使用以下代码解析文件:

cat ./conf/$1 | while read line; do
    export $line
done

但是当我在命令行中执行minientrega.sh prac1 ,它不会设置环境变量

我也尝试使用source ./conf/$1但同样的问题仍然适用

也许有其他方法可以做到这一点,我只需要使用我传递的文件的环境变量作为我的脚本的参数。


你的方法问题是while循环中的export发生在子shell中,而这些变量在当前shell(while循环的父shell)中不可用。

在文件本身中添加export命令:

export MINIENTREGA_FECHALIMITE="2011-03-31"
export MINIENTREGA_FICHEROS="informe.txt programa.c"
export MINIENTREGA_DESTINO="./destino/entrega-prac1"

然后,您需要使用以下命令在当前shell中输入文件:

. ./conf/prac1

要么

source ./conf/prac1

这可能会有所帮助:

export $(cat .env | xargs) && rails c

我使用这个的原因是,如果我想在我的.env控制台中测试.env东西。

gabrielf提出了一种保持变量在本地的好方法。 这解决了从项目到项目的潜在问题。

env $(cat .env | xargs) rails

我用bash 3.2.51(1)-release测试了这个 - bash 3.2.51(1)-release


更新:要忽略以#开头的行,请使用这个(感谢Pete的评论):

export $(cat .env | grep -v ^# | xargs)

如果您想unset文件中定义的所有变量,请使用以下命令:

unset $(cat .env | grep -v ^# | sed -E 's/(.*)=.*/1/' | xargs) 

-o allexport可以导出所有以下变量定义。 +o allexport禁用此功能。

set -o allexport
source conf-file
set +o allexport
链接地址: http://www.djcxy.com/p/24147.html

上一篇: Set environment variables from file

下一篇: Check number of arguments passed to a Bash script