単一行コマンドを使用してこれを自分のホストファイルに簡単に追加しようとしましたが、予期しない結果が表示されます。
$ sudo sh -c 'echo -e "10.0.10.0\tserver.bananas.com\tserver" >> /etc/hosts'
$ cat /etc/hosts
-e 10.0.10.0 server.bananas.com server
エコーで-eスイッチを使用してタブのバックスラッシュエスケープを有効にしましたが、-eがリダイレクトされた出力に含まれていました。
これをどのように避けることができますか?
答え1
あなたの質問によってなぜechoが失敗するのかわかりませんが、一般的に使用しますprintf
。結果はより予測可能です。
printf '%s\t%s\t%s\n' '10.0.10.0' 'server.bananas.com' 'server'
説明する
%s\t%s\t%s\n
:このセクションでは、出力形式(文字列、タブ、文字列、タブ、文字列、改行など)について説明します。- これら3つの文字列は、次のパラメータに提供されています
printf
。
rootが所有するファイルに書き込む
また、あなたがこれを知っているかどうかはわかりませんが、sudo sh -c
代わりにその構造を使用できますsudo tee
。つまり
printf … | sudo tee -a /etc/hosts
特に外部から脱出する必要がないので、これがより便利だと思います'
。