如果你真的想让这发生,它是可以做到的,但这很棘手。一种方法是使用 awk 输出正确的语法并评估从 awk 返回的文本。要在主要的 sh 和 csh 风格之间共享单个环境变量值文件,文件中的以下命令会将变量值文件导入环境:(是的,是的,这是一个巨大的行,由于某些 shell 处理的不灵活方式反引号。如果你不介意也有一个 .awk 文件,你可以使用 awk -f...)
eval `awk '{ var = $1; $1=""; val=substr($0,2); if ( ENVIRON["SHELL"] ~ /csh$/) { print "setenv", var, " \"" val "\";" } else { print var "=\"" val "\"" ; print "export", var }}' $HOME/env_value_file`
变量值文件采用以下格式:
FOO value for foo
BAR foo bar
BAZ $BAR plus values $FOO
用于教育目的的设计说明:
- 在 awk 中,访问字段 2-NF 没有简单的方法,所以如果我们的变量值中可能有空格,我们需要修改 $1 以使 $0 接近以获得我们想要的值。
- 为了让它工作,因为总是设置一个 SHELL 变量,但不是作为环境变量,也不是一致的大写,你必须从 shell 的值中润湿一个 SHELL 环境变量,如下所示。在使用脚本之前作为环境变量。
- 此外,如果您希望在导入环境脚本之后出现新的环境值,则需要获取环境脚本。
- 如果 shell 不能很好地进行 eval,则必须调整脚本。
对于 bourne shell 风味(bash、sh、ksh、zsh):
export SHELL
. import_environment
对于 csh 风格:(shell 变量在 csh shell 中往往是小写的)
setenv SHELL "$shell"
source import_environment