Использование sudo для цикла

Я хочу запустить простую команду loop с sudo, но она не работает:

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

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

-bash: syntax error near unexpected token `do'

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

Ответ 1

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

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

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

Ответ 2

Здесь вы можете попробовать команды sudo bash -c '

Ответ 3

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

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

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