无需循环,如何从grep输出中导出所有键值对?
不使用循环导出键值对为环境变量的方法
当你执行grep "=" someFile得到如下键值对时:
foo=bar
id_num=6
some_val=best
之前用grep "=" someFile | tee export没用是因为tee只是把内容写入文件,不会执行export命令。下面给你两种不用循环的可行方法:
方法一:用xargs配合export
直接执行这条命令:
grep "=" someFile | xargs -d '\n' export
xargs -d '\n'会把每一行键值对作为独立参数传给export,一次性完成所有变量的导出。注意这个依赖GNU xargs(大部分Linux系统默认是),如果是macOS这类用BSD xargs的环境,可以换成:
grep "=" someFile | xargs -I {} export {}
方法二:用eval批量执行export
执行这条命令:
eval "$(grep "=" someFile | sed 's/^/export /')"
原理是先用sed给每一行键值对前面加上export ,生成完整的导出命令,再通过eval一次性执行所有命令。这个方法兼容性更强,几乎所有shell环境都支持。
注意事项
不管用哪种方法,都要确保someFile里的内容是安全可信的——如果文件里包含恶意代码,eval或xargs执行后会带来风险。
内容的提问来源于stack exchange,提问作者vinWin
相关产品推荐
相关产品推荐

