3 回答
TA贡献1865条经验 获得超7个赞
你的方法的问题是export在while循环中一个子壳发生,这些变量不会在当前的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
TA贡献1836条经验 获得超13个赞
这可能会有所帮助:
export $(cat .env | xargs) && rails c
我之所以使用它,是因为我想.env在Rails控制台中进行测试。
gabrielf提出了一种使变量保持局部的好方法。这解决了从一个项目到另一个项目时的潜在问题。
env $(cat .env | xargs) rails
我已经用 bash 3.2.51(1)-release
更新:
要忽略以开头的行#,请使用以下命令(感谢Pete的注释):
export $(grep -v '^#' .env | xargs)
而且,如果要对unset文件中定义的所有变量进行操作,请使用以下命令:
unset $(grep -v '^#' .env | sed -E 's/(.*)=.*/\1/' | xargs)
更新:
要同时使用空格处理值,请使用:
export $(grep -v '^#' .env | xargs -d '\n')
在GNU系统上-或:
export $(grep -v '^#' .env | xargs -0)
在BSD系统上。
TA贡献1776条经验 获得超12个赞
allexport在此处的其他几个答案中也提到了该选项,这set -a是快捷方式。提供.env确实比循环循环并导出更好,因为它允许注释,空白行甚至命令生成的环境变量。我的.bashrc包括以下内容:
# .env loading in the shell
dotenv () {
set -a
[ -f .env ] && . .env
set +a
}
# Run dotenv on login
dotenv
# Run dotenv on every new directory
cd () {
builtin cd $@
dotenv
}
- 3 回答
- 0 关注
- 470 浏览
添加回答
举报