sudo の挙動2009/06/25 13:38

先日のスクリプトの続きでまたおもしろい経験をした。

OS Xでは通常 root アカウントが無効にされているため、ターミナル内の CUI で管理権限が必要な操作を行う場合、コマンドの頭に sudo をつけて実行する必要がある。

/etc/hosts ファイルにレコードを追加する必要がでてきたので、この間 Automator で sudo route add のスクリプトをアプリケーション化したのと同じように、

sudo echo 192.168.111.xxx foo.bar.com >> /etc/hosts

といった内容を作ってみたところ、動作確認でエラーが出てしまう。

同じ一文を実際にコマンドラインで実行してみたら、/etc/hosts に対するパーミッションエラーでアクセス拒否されてしまうことがわかった。

これは sudo で管理権限が与えられているのが echo コマンドだけで、次のリダイレクションによる /etc/hosts に対する文字列書き込み動作にはその影響が及ばないからだろうと思い、Automator を離れて、単純にsudo 抜きのコマンドだけを記述したシェルスクリプト script.sh を書いて

sudo ./script.sh

とコマンドラインから実行してみたら、みごとに通った。

「そんなことは常識」と言われてしまう程度のことかもしれないが、まぁひとつお利口になりました。