首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash中生成脚本并保存到需要sudo的位置

在bash中生成脚本并保存到需要sudo的位置
EN

Stack Overflow用户
提问于 2010-12-11 02:27:32
回答 3查看 9.2K关注 0票数 32

在bash中,我可以创建一个带有here-doc的脚本,如下所示,根据这个站点:http://tldp.org/LDP/abs/html/abs-guide.html#GENERATESCRIPT

代码语言:javascript
复制
(
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命令放在哪里,或者我还能做些什么来使它工作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-11 02:33:44

仅仅将sudo放在cat之前是行不通的,因为>$OUTFILE试图在当前shell进程中打开$OUTFILE,而当前shell进程不是以根用户身份运行的。您需要在sudo-ed子进程中打开该文件。

以下是实现这一点的一种方法:

代码语言:javascript
复制
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,然后运行cat (作为另一个特权子进程)。同时,(较低特权的)父进程通过管道将here-document传递给sudo子进程。

票数 27
EN

Stack Overflow用户

发布于 2010-12-11 09:58:49

这就是我要做的:

代码语言:javascript
复制
sudo tee "$OUTFILE" > /dev/null <<'EOF'
foo
bar
EOF
票数 70
EN

Stack Overflow用户

发布于 2019-12-24 12:32:29

答案中没有扩展环境变量。我的解决方法是tmp文件和sudo mv。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4412029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档