問題

sudoで単純なforループコマンドを実行したいのですが、動作しません。

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

次のエラーが表示されます。

 -bash: syntax error near unexpected token `do'
 

おそらく私が見落としている非常に単純なことです。どんな助け?

  ベストアンサー

sudoは、シェルスクリプトではなく、パラメータとしてプログラム(+引数)を必要とします。しかし、これを行うことはできます:

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

一重引用符に注意してください。二重引用符を使用すると、シェルはsudo(または、シェルが実行する)がそれを見る前に$iを展開しようとします。

PS。コメントで指摘されている別の問題(わずか6年後)は、ディレクトリ内のファイルを反復処理する場合、適切な構文はfor i in /dir/*です。 forはリストを受け入れ、/dirはリストです... 1つの項目を持つ。 /dir/*は、ワイルドカード展開のために/dirのファイルのリストに展開されます。

  同じタグがついた質問を見る

bashfor-loopsudo