sudoでリダイレクトするときにハマること

sudoで何か実行するとき、普通にリダイレクトするとリダイレクト処理自体は自分の権限になっててハマることがある。

sudo svnadmin dump hoge >hoge.dump

ついつい上のようにやってしまいがちだけど、これをやるとhoge.dumpは自分の権限で書き込まれる。書き込み先に権限が無ければ当然エラーになる。
「sudo svnadmin dump hoge」の実行結果をリダイレクトって感じだろうか。


じゃあどうすればいいのかというと、方法は二種類。

sudo sh -c 'svnadmin dump hoge >hoge.dump'

ひとつのシェルの実行として括ったものをsudoする方法。
やりたいことの中にクォートがあるとややこしそうだという欠点がある。
ちなみにこの方法はsudo(8)に書かれているやりかた。


もうひとつ。

sudo svnadmin dump hoge | sudo tee hoge.dump

パイプでsudo teeに繋いで保存する方法。
標準出力にも出てしまう欠点がある。ここで>/dev/nullとかやるとまた同じ問題にハマる罠。