エコーから出力をリダイレクトするときにこれらの予期しない動作を防ぐにはどうすればよいですか?

エコーから出力をリダイレクトするときにこれらの予期しない動作を防ぐにはどうすればよいですか?

単一行コマンドを使用してこれを自分のホストファイルに簡単に追加しようとしましたが、予期しない結果が表示されます。

$ 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

特に外部から脱出する必要がないので、これがより便利だと思います'

関連情報