D W*_*D W 27 bash sudo heredoc
在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
Run Code Online (Sandbox Code Playgroud)
如果我$OUTFILE
是一个需要sudo
权限的目录,我在哪里放置sudo
命令或我还能做些什么来使其工作?
Pau*_*ce. 58
我就是这样做的:
sudo tee "$OUTFILE" > /dev/null <<'EOF'
foo
bar
EOF
Run Code Online (Sandbox Code Playgroud)
Lau*_*ves 22
只是放在sudo
之前cat
不起作用,因为>$OUTFILE
尝试$OUTFILE
在当前shell进程中打开,而不是以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
Run Code Online (Sandbox Code Playgroud)
这将启动一个子shell sudo
,并$OUTFILE
从该更具特权的子进程打开,并运行cat
(作为另一个特权子进程).同时,(较少特权的)父进程将here-document传递给sudo
子进程.