32

bash では、このサイトのようにヒアドキュメントを使用してスクリプトを作成できます: 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

myが特権を$OUTFILE必要とするディレクトリである場合、コマンドをどこに置くか、またはそれを機能させるために他に何ができますか?sudosudo

4

3 に答える 3

71

これは私がそれを行う方法です:

sudo tee "$OUTFILE" > /dev/null <<'EOF'
foo
bar
EOF
于 2010-12-11T01:58:48.983 に答える
27

rootとして実行されていない現在のシェルプロセスで開こうとするため、sudo前に置くだけでcatは機能しません。-ed サブプロセスでそのファイルを開く必要があります。>$OUTFILE$OUTFILEsudo

これを実現する 1 つの方法を次に示します。

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開かれ、 (さらに別の特権的なサブプロセスとして) 実行されます。一方、(権限の低い) 親プロセスは、ヒアドキュメントをサブプロセスにパイプします。$OUTFILEcatsudo

于 2010-12-10T18:33:44.030 に答える