我想使用sudo运行一个简单的for循环命令,但是它不起作用:
sudo -i -u user for i in /dir; do echo $i; done
我收到以下错误:
-bash: syntax error near unexpected token `do'
可能是我忽略了一个非常简单的事情。有帮助吗?
sudo需要一个程序(+参数)作为参数,而不是一段Shell脚本。你可以这样做:
sudo -i -u user sh -c 'for i in /dir; do echo $i; done'
注意使用单引号。如果您使用双引号,您的shell将在sudo(或者更准确地说,由其运行的shell)看到$i之前就会尝试展开它。
PS. 如评论中指出的一个单独问题(六年后),如果想要迭代目录中的文件,则正确的语法是for i in /dir/*
。 for
接受列表,而/dir
是一个列表...有一个元素。/dir/*
由于通配符扩展而扩展为/dir
中的文件列表。
for i in /dir; do
sudo -u user somecommand $i
done
如果您需要其他用户的权限来生成循环的 glob,则需要额外的步骤才能使其正常工作。