やりたかったこと
使用するシェルを変更しようと、/etc/shells
末尾にコマンドラインからパスを追記したかったです。
1
which zsh >> /etc/shells
この時、/etc/shells
はrootの所有物なので、permission error が発生したため、sudo をつけて再度実施しました。
1
sudo which zsh >> /etc/shells
1
permission denied: /etc/shells
は?(強め)
原因
ファイルに書き込む際の>
や>>
をリダイレクトと呼びますが、このリダイレクト処理はsudoを頭につけようがログインユーザーの権限で行われるそうです。
解決方法: tee コマンドにパイプする
tee
コマンドを使うことが解決方法の一つに挙げられることが多いようです。
teeとは入力された値を標準出力とファイル出力の両方処理するコマンドです。
コマンドなのでsudoを頭につけることができて、
1
which zsh | sudo tee -a /etc/shells
とすることで解決できました!
💡
-a
オプションはファイル末尾に追記するときに使用します。
先頭に追加する際は外してください。
💡
標準出力が不要なら > /dev/null
を後ろにつけることで回避できます。
まとめ
最近職場に触発されて色々とコマンドライン上でやろうとする気持ちが芽生えてきているので、少しずつ覚えていこうと思います!