2010-12-10 4 views
20

En bash je peux créer un script avec un ici-doc comme de façon par ce site: http://tldp.org/LDP/abs/html/abs-guide.html#GENERATESCRIPTGénérer un script bash et enregistrez-le à l'emplacement nécessitant 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 

Si mon $OUTFILE est un répertoire exigeant sudo privilèges où dois-je mettre la commande sudo ou quoi d'autre puis-je faire pour le faire fonctionner?

+0

Je suppose qu'une solution est de générer le fichier vers un emplacement temporaire, puis le déplacer avec sudo au bon endroit. Est-ce la façon la plus élégante de le faire? –

Répondre

14

Vous ne pouvez pas simplement mettre sudo avant chat car> $ OUTFILE tente d'ouvrir $ OUTFILE dans le processus shell en cours, qui ne s'exécute pas en tant que root. L'ouverture de ce fichier doit avoir lieu dans un sous-processus sudo-ed.

est ici une façon de le faire:

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

Cela fonctionne pour mon exemple de travail minimum mais pas pour mon script actuel. J'ai rendu mon exemple de travail minimum suffisamment compliqué, pouvez-vous m'aider avec le nouveau script? –

+0

@D W: Je n'avais pas cité votre mot ici, qui pourrait avoir été la source de votre problème. Désolé pour ça. Essayez de le citer à nouveau, comme indiqué dans ma réponse mise à jour. –

+0

@D W: avez-vous essayé la réponse mise à jour? Cela fonctionne avec le nouveau code dans votre question. Je suis juste allé le mettre à jour pour inclure le code de votre question. –

44

Voici comment je le ferais:

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

utilisation intelligente de tee, thx – javadba

+0

Comment utilisez-vous cette méthode pour ajouter à un fichier existant? – MountainX

+5

@MountainX: 'tee -a' s'ajoute au fichier. –

Questions connexes