使用sudo和for循环

时间:2012-06-04 22:07:34

标签: bash for-loop sudo

我想用sudo运行一个简单的for循环命令,但它无效:

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

我收到以下错误:

-bash: syntax error near unexpected token `do'

我可能会忽视一件非常简单的事情。有什么帮助吗?

3 个答案:

答案 0 :(得分:25)

sudo想要一个程序(+参数)作为参数,而不是一个shell脚本。但是你可以这样做:

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

请注意单引号。如果你使用双引号,你的shell会尝试在sudo之前展开$i(或者更确切地说,由它运行的shell)。{/ p>

PS。一个单独的问题,正如评论中指出的那样(仅六年之后),如果你想迭代目录中的文件,正确的语法是for i in /dir/*for接受一个列表,/dir是一个列表...包含一个项目。由于通配符扩展,/dir/*扩展为/dir中的文件列表。

答案 1 :(得分:3)

你可以在这里尝试sudo bash -c'命令'

答案 2 :(得分:2)

将sudo放入循环中:

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

如果你需要其他用户的权限来为循环生成glob,那么如果没有额外的步骤,这将无法工作。