環境構築自動化の時に良く使うのが、特定の文字列をroot権限のファイルに追記する処理。
echo使ってリダイレクトはよくやる手段。
だけどroot権限のファイルを書き換えたりしようとするとPermission Errorになっちゃう。
リダイレクトにはsudoを使うことができません。
つまり、こんなことはできません。
1 |
sudo echo "a" >> /etc/hosts |
なので、そういった時は「tee」コマンドを使いましょう。
teeコマンドとはコマンドの結果の出力をファイルに書き込んだりしてくれるコマンドだよ(*´∀`*)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ tee --h Usage: tee [OPTION]... [FILE]... Copy standard input to each FILE, and also to standard output. -a, --append append to the given FILEs, do not overwrite -i, --ignore-interrupts ignore interrupt signals --help display this help and exit --version output version information and exit If a FILE is -, copy again to standard output. GNU coreutils online help: <http://www.gnu.org/software/coreutils/> For complete documentation, run: info coreutils 'tee invocation' |
1 |
echo '127.0.0.1 butapachi' | sudo tee -a /etc/hosts |
-a とあるがこれはなに(ㆁωㆁ*)?
これは追記を意味します。
「>>」←これと同じ。
新規で書き込む場合は、-aを取って問題ありません。
Chefのレシピにするとこんな感じ。
1 2 3 |
bash "add host to /etc/hosts" do code "echo '127.0.0.1 butapachi' | sudo tee -a /etc/hosts" end |
DockerfileやChefで環境構築している時によく使うんだよね。
あまりにも多すぎたらFile置いちゃったりするんだけどね(*´∀`*)笑
じゃあね〜〜〜。