[英]Generate script in bash and save it to location requiring sudo
在 bash 中,我可以创建一个带有 here-doc 的脚本,就像这个站点一样: http : //tldp.org/LDP/abs/html/abs-guide.html#GENERATESCRIPT
(
cat <<'EOF'
#!/bin/bash
#? [ ] / \ = + < > : ; " , * |
#/ ? < > \ : * | ”
#Filename="z:"${$winFn//\//\\}
echo "This is a generated shell script."
App='eval wine "C:\Program Files\foxit\Foxit Reader.exe" "'$winFn'"'
$App
EOF
) > $OUTFILE
如果我的$OUTFILE
是一个需要sudo
权限的目录,我应该把sudo
命令放在哪里,或者我还能做些什么来使它工作?
这就是我将如何做到的:
sudo tee "$OUTFILE" > /dev/null <<'EOF'
foo
bar
EOF
将sudo
放在cat
之前是行不通的,因为>$OUTFILE
尝试在当前 shell 进程中打开$OUTFILE
,该进程不是以 root 身份运行的。 您需要在sudo
-ed 子进程中打开该文件。
这是实现此目的的一种方法:
sudo bash -c "cat >$OUTFILE" <<'EOF'
#!/bin/bash
#? [ ] / \ = + < > : ; " , * |
#/ ? < > \ : * | ”
#Filename="z:"${$winFn//\//\\}
echo "This is a generated shell script."
App='eval wine "C:\Program Files\foxit\Foxit Reader.exe" "'$winFn'"'
$App
EOF
这将在sudo
下启动一个子 shell,并从该更高特权的子$OUTFILE
打开$OUTFILE
,并运行cat
(作为另一个特权子进程)。 同时,(特权较低的)父进程通过管道将 here-document 传递给sudo
子进程。
没有一个答案扩展了环境变量。 我的解决方法是一个 tmp 文件和一个 sudo mv。
l_log=/var/log/server/server.log
l_logrotateconf=/etc/logrotate.d/server
tmp=/tmp/$$.eof
cat << EOF > $tmp
$l_log {
rotate 12
monthly
compress
missingok
notifempty
}
EOF
sudo mv $tmp $logrotateconf
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.