2016-11-13 42 views
0

我有这个bash代码替换模板文本文件中的某些变量并将结果写入某处。这工作:使用sudo shell envsubst命令中的导出变量的正确引号

#!/usr/bin/env bash 
PROJECTFOLDER=$1 
USER=$2 

export PROJECTFOLDER USER 
CONFIGVARS='$PROJECTFOLDER:$USER' 

envsubst "$CONFIGVARS" <template.conf> /home/me/config.inc.php 

和template.conf像这样:

./script foo bar 

这给:

<h1>foo</h1> 
<h2>bar</h2> 

但是如果我想

<h1>${USER}</h1> 
<h2>${PROJECTFOLDER}</h2> 

调用时使用使用sudo或root i将输出保存到文件夹t不起作用,as seen here

我应该做的是在sudo shell中运行命令(我不想使用tee或dd方法来保持它简单)。

sudo sh -c 'envsubst "$CONFIGVARS" <template.conf> /etc/config.inc.php' 

但无论行情ANDS括号我尝试的组合,它提供了两种

<h1>${USER}</h1> 
<h2>${PROJECTFOLDER}</h2> 

空:

<h1></h1> 
<h2></h2> 

解决方案 感谢l0b0:

envsubst "$CONFIGVARS" < template.conf | sudo tee /etc/config.inc.php 
+0

变量不会导出到'sudo'。 – choroba

回答

2

你想要做的是将命令输入到sudo tee /home/me/config.inc.php