从文件设置环境变量
我在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