2010-12-10 12 views
20

を必要とする場所に保存私はこのサイトごとなどのように、ここで-docのでスクリプトを作成することができます http://tldp.org/LDP/abs/html/abs-guide.html#GENERATESCRIPTはbashでスクリプトを生成し、bashでsudoの

(
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 

$OUTFILEsudoを必要とするディレクトリである場合特権sudoコマンドをどこに置くのですか、それを動作させるために何ができるのですか?

+0

私は一つの解決策は、一時的な場所にファイルを生成し、その後でそれを移動することであると仮定適切な場所にsudoしてください。それはそれを行う最もエレガントな方法ですか? –

答えて

14

> $ OUTFILEが現在のシェルプロセスで$ OUTFILEを開こうとするため、catの前にsudoを置くことはできません。これは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 
+0

これは私の最低限の動作例では動作しますが、実際のスクリプトでは動作しません。私は最小限の作業例を十分に複雑にしました。新しいスクリプトで私を助けてくれますか? –

+0

@D W:あなたのトラブルの原因かもしれないあなたのここの言葉を引用してはいけません。申し訳ありません。私の更新された答えに示されているように、再度引用してみてください。 –

+0

@D W:更新された回答を試しましたか?それはあなたの質問の新しいコードで動作します。私はちょうどあなたの質問からのコードを実際に含めるためにもう一度それを更新しました。 –

44

これは、私はそれを行うだろうかです:

sudo tee "$OUTFILE" > /dev/null <<'EOF' 
foo 
bar 
EOF 
+0

teeの賢い使い方、thx – javadba

+0

この方法を使って、既存のファイルにどのように追加しますか? – MountainX

+5

@MountainX: 'tee -a'はファイルに追加します。 –

関連する問題