我想用sudo运行一个简单的for循环命令,但它无效:
sudo -i -u user for i in /dir; do echo $i; done
我收到以下错误:
-bash: syntax error near unexpected token `do'
我可能会忽视一件非常简单的事情。有什么帮助吗?
答案 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,那么如果没有额外的步骤,这将无法工作。