2012-06-04 2 views
11

Я хочу запустить простой для команды петли с Судо, но он не работает:Использование Sudo с петлей для

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

Я получаю следующее сообщение об ошибке:

-bash: syntax error near unexpected token `do' 

Вероятно, очень простой предмет я пропускаю. Любая помощь?

ответ

21

sudo хочет, чтобы программа (+ аргументы) была параметром, а не частью сценария оболочки. Вы можете это сделать, однако:

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

Обратите внимание на одинарные кавычки. Если вы использовали двойные кавычки, ваша оболочка попытается развернуть $i до того, как sudo (или, скорее, оболочка от нее) увидит ее.

+0

у вас это получилось! Всем удачи. – shellter

+0

Это сделало трюк, спасибо! – Axl

+0

В соответствии с этим каждый выходной файл будет записан/сохранен в домашнем каталоге указанного пользователя. Что делать, если я хочу, чтобы результат был написан в определенном? –

3

Вы можете попробовать Sudo Баш -c «команды здесь»

1

Поместите Sudo внутри цикла:

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

Это не будет работать без дополнительных шагов, если вам нужны права доступа других пользователей, чтобы генерировать например, glob для цикла.

+0

Проблема в том, что если тайм-аут sudo недостаточно велик, он будет постоянно запрашивать пароль :( –