Bash 将cat内容回显到文件中

Bash 将cat内容回显到文件中,bash,environment-variables,echo,cat,Bash,Environment Variables,Echo,Cat,我有一个文件“setting.xml”,其中包含一些环境变量 <localRepository>/Users/$(whoami)/.m2/repository 但不确定如何将内容传递给echo命令 cat setting.xml > production.xml && sed -i "s/::whoami/$(whoami)/g" production.xm 只需使用> 最好在文件中使用::whoami,而不是$(whoami) 模板: <local

我有一个文件“setting.xml”,其中包含一些环境变量

<localRepository>/Users/$(whoami)/.m2/repository
但不确定如何将内容传递给echo命令

cat setting.xml > production.xml && sed -i "s/::whoami/$(whoami)/g"  production.xm
只需使用
>
最好在文件中使用
::whoami
,而不是
$(whoami)

模板:

<localRepository>/Users/::whoami/.m2/repository
/Users/::whoami/.m2/存储库
您可以尝试:

sed "s/\$(whoami)/$(whoami)/" < setting.xml >production.xml
sed“s/\$(whoami)/$(whoami)/”production.xml

sed
是一个流编辑器,在上面,用命令
whoami

的结果替换文本
$(whoami)
,通用方法是:

eval echo `cat setting.xml | sed -r 's/([<>])/\\\\\1/g'` > production.xml
eval echo`cat setting.xml;sed-r的/([])/\1/g`>production.xml
它可能需要转义更多的字符,而不仅仅是


但是要小心@jm666之类的安全问题。要替换环境变量,可以使用
envsubt
。整个命令将是:

envsubst < setting.xml > production.xml

您可以查看以了解更多信息。

也许您可以在这里使用更通用的方法,并用所有的
$(..)
替换它们的扩展?@TomFenech可能,但这对我来说太危险了,比如
$(rm-rf/)
:)用sed编辑XML,这是完全错误的……)谢谢,我如何替换多个环境变量?像
$(whoami)
$some\u path
envsubst < setting.xml > production.xml
apt-get install gettext-base