2012-06-04 17 views
11

Quiero ejecutar un simple comando de bucle con sudo, pero no está trabajando:Utilizar sudo con el bucle for

sudo -i -u user for i in /dir; do echo $i; done 

me sale el siguiente error:

-bash: syntax error near unexpected token `do' 

Probablemente una muy cosa simple que estoy pasando por alto. ¿Alguna ayuda?

Respuesta

21

sudo quiere un programa (+ argumentos) como parámetro, no un fragmento de script de shell. Sin embargo, puede hacer esto:

sudo -i -u user sh -c 'for i in /dir; do echo $i; done' 

Tenga en cuenta las comillas simples. Si utilizó comillas dobles, su caparazón trataría de expandir el $i antes de que sudo (o, más bien, el shell que ejecuta) lo vea alguna vez.

+0

¡lo tienes! Buena suerte a todos. – shellter

+0

Eso hizo el truco, gracias! – Axl

+0

De acuerdo con esto, cada archivo de salida se escribirá/guardará en el directorio de inicio del usuario especificado. ¿Qué sucede si quiero que la salida se escriba en una específica? –

3

Usted puede intentar sudo fiesta -c 'comandos aquí'

1

Coloque el sudo dentro del bucle:

for i in /dir; do 
    sudo -u user somecommand $i 
done 

Esto no funcionará sin medidas adicionales si necesita permisos del otro usuario para generar el globo para el bucle, por ejemplo.

+0

El problema con esto es que si el tiempo de espera de sudo no es lo suficientemente grande, le pedirá la contraseña todo el tiempo :( –