Io-Redirection

從 echo 重定向輸出時,如何避免這種意外行為?

  • December 19, 2018

我想使用一行命令輕鬆添加到我的主機文件中,但我得到了意想不到的結果。

$ 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

我在 echo 上使用 -e 開關來啟用製表符的反斜杠轉義,但 -e 包含在重定向輸出中。

我怎樣才能避免這種情況?

根據您的問題,我不確定為什麼 echo 會失敗,但總的來說,我會printf改用它。它的輸出更具可預測性。

printf '%s\t%s\t%s\n' '10.0.10.0' 'server.bananas.com' 'server'

解釋

  • %s\t%s\t%s\n:這部分解釋了輸出格式是什麼,即字元串、製表符、字元串、製表符、字元串、換行符。
  • 這三個字元串是提供給的以下參數printf

寫入根擁有的文件

另外,我不確定您是否知道,但sudo sh -c您可以使用而不是使用該構造sudo tee。IE

printf … | sudo tee -a /etc/hosts

我發現這更方便,尤其是當它避免在外部轉義字元時'

引用自:https://unix.stackexchange.com/questions/489815