tr a A </ etc / hosts | 排序-r | pr -d> / etc / hosts


9

在这一行:

tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts 

预期的结果是什么?我知道小写字母“ a”将变为大写字母“ A”,但是接下来是什么呢?由于重定向到相同的文件名,原始文件会被覆盖吗?


您应该会得到一个bash: /etc/hosts: Permission denied错误(假设您的shell是bash),除非您将此运行为root/etc/hosts通常只能由root写入。如果您以root(实际上不应该)运行它,那么您将/etc/hosts如迈克尔·霍默(Michael Homer)所说的那样空着。
arielf

Answers:


17

预期的结果是一个空白/etc/hosts文件。

在程序开始运行并开始从文件读取之前,> /etc/hosts会发生重定向并截断 文件。tr

要将输出写入/etc/hosts,您可以使用文件的副本(或之后将输出文件移到适当的位置),也可以使用spongemoreutils命令,命令将吸收标准输入并写入文件:

tr a A < /etc/hosts | sort -r | pr -d | sponge /etc/hosts

在这种情况下,每个“A”在/etc/hosts将被替换为“A”,所有的线将被以相反的具体的语言环境来分类一个空行将每行之间插入,且结果将被放入/etc/hosts


您可能还会发现有用:


1
非常感谢您澄清我对编写方式的期望以及如何编写以获得预期结果的方式。
tdharrison '18

moreutils是一个非常出色的工具套件
Robert Riedl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.