2012-06-04 16 views
11

voglio correre un semplice comando per ciclo con sudo, ma non funziona:Utilizzo di sudo con ciclo for

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

ottengo il seguente errore:

-bash: syntax error near unexpected token `do' 

Probabilmente molto cosa semplice sto trascurando. Qualsiasi aiuto?

risposta

21

sudo desidera un programma (+ argomenti) come parametro, non un pezzo di script di shell. Puoi farlo però:

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

Nota le virgolette singole. Se hai usato virgolette doppie, la tua shell proverà ad espandere lo $i prima che sudo (o, piuttosto, la shell da esso gestita) lo veda.

+0

hai capito! Buona fortuna a tutti. – shellter

+0

Questo ha fatto il trucco, grazie! – Axl

+0

In base a questo, ogni file di output verrà scritto/salvato nella directory home dell'utente specificato. Cosa succede se voglio che l'output sia scritto in uno specifico? –

3

Si può provare sudo bash -c 'comanda qui'

1

Mettere il sudo all'interno del ciclo:

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

Questo non funzionerà senza passaggi aggiuntivi se avete bisogno di permessi di un altro utente per generare il glob per il ciclo, per esempio.

+0

Il problema con questo è che se il timeout sudo non è abbastanza grande, chiederà la password tutto il tempo :( –