在sudo shell envsubst命令

时间:2016-11-13 18:28:00

标签: bash

我有这个bash代码替换模板文本文件中的一些变量并将结果写在某处。这有效:

#!/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一样:

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

使用时调用:

./script foo bar 

这给出了:

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

但是,如果我想将输出保存到具有sudo或root的文件夹,则它不起作用as seen here

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

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

但无论我尝试什么引号和括号的组合,它都会给出

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

或者没有:

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

解决方案 感谢l0b0:

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

1 个答案:

答案 0 :(得分:2)

您要做的是将命令传递给sudo tee /home/me/config.inc.php