22

sudoを使用して単純なforループコマンドを実行したいのですが、機能しません。

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

次のエラーが発生します。

-bash: syntax error near unexpected token `do'

おそらく私が見落としている非常に単純なことです。何か助けはありますか?

4

3 に答える 3

33

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

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

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

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

于 2012-06-04T22:10:18.997 に答える
6

ここでsudobash-c'コマンドを試すことができます'

于 2012-06-04T22:12:50.800 に答える
2

sudoをループ内に配置します。

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

たとえば、ループのグロブを生成するために他のユーザーの権限が必要な場合、これは追加の手順なしでは機能しません。

于 2012-06-04T22:15:10.447 に答える