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.