我有这个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
答案 0 :(得分:2)
您要做的是将命令传递给sudo tee /home/me/config.inc.php
。