使用sudo和for循环

Axl*_*Axl 19 bash sudo for-loop

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

sudo -i -u user for i in /dir; do echo $i; done
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

-bash: syntax error near unexpected token `do'
Run Code Online (Sandbox Code Playgroud)

可能是我忽略的一件非常简单的事情.有帮助吗?

Jan*_*ger 27

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

sudo -i -u user sh -c 'for i in /dir; do echo $i; done'
Run Code Online (Sandbox Code Playgroud)

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

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


BLa*_*uRE 5

您可以尝试sudo bash -c'commands here'