从 echo 重定向输出时如何避免这种意外行为?

从 echo 重定向输出时如何避免这种意外行为?

我想使用一行命令轻松添加到我的主机文件中,但我得到了意想不到的结果。

$ 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 包含在重定向的输出中。

我怎样才能避免这种情况?

答案1

我不太确定为什么 echo 根据您的问题失败,但一般来说,我会使用它printf。它的输出更加可预测。

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

解释

  • %s\t%s\t%s\n:这部分解释了输出格式,即字符串、制表符、字符串、制表符、字符串、换行符。
  • 这三个字符串是提供给 的以下参数printf

写入 root 拥有的文件

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

printf … | sudo tee -a /etc/hosts

我发现这更方便,特别是当它避免必须转义外部'.

相关内容