ページ

2014/05/08

sudoでリダイレクトをしたい

環境移行中なのですが、ログインシェルを zsh に変更したくなりました。
GitHub の README.md にコマンドを書いておいて
移行時に実行するだけにしたかったので
MacにHomeBrewとzshを導入してみた | DevAchieveの工程を
以下のように変更してみました。
echo '/usr/local/bin/zsh' >> /etc/shells
以下のように見事に拒否されます。
zsh: permission denied: /etc/shells
以下のように sudo を付けても同様に拒否されます。
sudo echo '/usr/local/bin/zsh' >> /etc/shells

shのオプションに-cを付ける

sudoでリダイレクトをしたいとき - Yuta.Kikuchiの日記
回避策1 : shのオプションに-cを付ける

man sudoを見てみます。そうすると以下のように実行せよという記述がありました。-cとして実行したいコマンドを""でくくるみたいです。
To make a usage listing of the directories in the /home partition.
Note that this runs the commands in a sub-shell to make the cd and file
redirection work.

$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
というわけで以下のように記述すると成功しました。
sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"
chsh -s /usr/local/bin/zsh
活用事例:wada811/dotfiles#change-default-shell-to-zsh