Использование 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 для цикла, например.