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'
一重引用符に注意してください。$i
二重引用符を使用した場合、sudo(または、sudoによって実行されるシェル)がそれを認識する前に、シェルは展開しようとします。
PS。コメント(わずか6年後)で指摘されているように、別の問題は、ディレクトリ内のファイルを反復処理する場合、適切な構文がであるということですfor i in /dir/*
。for
リストを受け入れ、/dir
1つのアイテムを持つリストです。ワイルドカード展開により/dir/*
、のファイルのリストに展開されます。/dir
ここでsudobash-c'コマンドを試すことができます'
sudoをループ内に配置します。
for i in /dir; do
sudo -u user somecommand $i
done
たとえば、ループのグロブを生成するために他のユーザーの権限が必要な場合、これは追加の手順なしでは機能しません。