导出值包含 space 的环境文件
Exporting an env-file with values containing space
我正在使用环境文件来配置网络应用程序。最近我需要导出这样的值:
RUBYOPT='-W:no-derecated -W:no-experimental'
这与其他配置变量一起包含在文件 test.env
中。
我使用此命令导出文件中的所有环境变量:
export $(cat test.env | xargs)
使用上面的值,命令给出这个错误:
-bash: export: `-W:no-experimental'': not a valid identifier
我可以通过复制粘贴 cat test.env | xargs
的输出来导出值,但是在像上面这样的单个命令中它不起作用。
一些测试表明,当值包含 space
并且之后某处是冒号 :
.
时会出现问题
我需要什么样的引用魔法才能使我的 env 文件再次工作?
带有 export $(cat test.env | xargs)
的构造非常脆弱,您得到 shell 对 '
字符(和其他特殊字符)的解释,因此 RUBYOPT='-W:no-derecated -W:no-experimental'
变为 RUBYOPT=-W:no-derecated -W:no-experimental
.注意缺少的 '
。这不是问题,直到您在其中设置带有 space 的变量。
我建议放弃这种导出环境文件中所有变量的方式。
如果您的 test.env
文件包含未 export
编辑的 bash
语法中的变量赋值,您可以改为打开自动导出,然后获取 test.env
文件。
示例:
set -a # turn on automatic exporting
. test.env # source test.env
set +a # turn off automatic exporting
来自 BASH_BUILTINS
(man set
):
set -a
"每个创建或修改的变量或函数都被赋予导出属性并标记为导出到后续命令的环境。"
我正在使用环境文件来配置网络应用程序。最近我需要导出这样的值:
RUBYOPT='-W:no-derecated -W:no-experimental'
这与其他配置变量一起包含在文件 test.env
中。
我使用此命令导出文件中的所有环境变量:
export $(cat test.env | xargs)
使用上面的值,命令给出这个错误:
-bash: export: `-W:no-experimental'': not a valid identifier
我可以通过复制粘贴 cat test.env | xargs
的输出来导出值,但是在像上面这样的单个命令中它不起作用。
一些测试表明,当值包含 space
并且之后某处是冒号 :
.
我需要什么样的引用魔法才能使我的 env 文件再次工作?
带有 export $(cat test.env | xargs)
的构造非常脆弱,您得到 shell 对 '
字符(和其他特殊字符)的解释,因此 RUBYOPT='-W:no-derecated -W:no-experimental'
变为 RUBYOPT=-W:no-derecated -W:no-experimental
.注意缺少的 '
。这不是问题,直到您在其中设置带有 space 的变量。
我建议放弃这种导出环境文件中所有变量的方式。
如果您的 test.env
文件包含未 export
编辑的 bash
语法中的变量赋值,您可以改为打开自动导出,然后获取 test.env
文件。
示例:
set -a # turn on automatic exporting
. test.env # source test.env
set +a # turn off automatic exporting
来自 BASH_BUILTINS
(man set
):
set -a
"每个创建或修改的变量或函数都被赋予导出属性并标记为导出到后续命令的环境。"