2010-12-10 11 views
20

En bash puedo crear un guión con un aquí-doc como tal de acuerdo con este sitio: http://tldp.org/LDP/abs/html/abs-guide.html#GENERATESCRIPTGenerar guión en bash y guardarlo en la ubicación que requiere 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 mi $OUTFILE es un directorio que requiere sudo privilegios ¿dónde pongo el comando sudo o qué más puedo hacer para que funcione?

+0

supongo que una solución es generar el archivo en una ubicación temporal y luego moverlo con sudo a la ubicación correcta. ¿Es esa la manera más elegante de hacerlo? –

Respuesta

14

No puede simplemente poner sudo antes de cat porque> $ OUTFILE intenta abrir $ OUTFILE en el proceso de shell actual, que no se ejecuta como root. Necesita que la apertura de ese archivo se realice en un subproceso sudoed.

Aquí hay una manera de hacerlo:

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

Esto funciona para mi ejemplo mínimo de trabajo pero no para mi script actual. He hecho que mi ejemplo mínimo de trabajo sea lo suficientemente complicado, ¿me pueden ayudar con el nuevo guión? –

+0

@D W: He desmarcado su palabra aquí, que puede haber sido la fuente de su problema. Lo siento por eso. Intente volver a citarlo, como se muestra en mi respuesta actualizada. –

+0

@D W: ¿has probado la respuesta actualizada? Funciona con el código más nuevo en su pregunta. Simplemente fui y lo actualicé nuevamente para incluir realmente el código de su pregunta. –

44

Ésta es la forma en que lo haría:

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

uso inteligente de tee, thx – javadba

+0

¿Cómo se usa este método para anexar a un archivo existente? – MountainX

+5

@MountainX: 'tee -a' se agrega al archivo. –

Cuestiones relacionadas