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

9

In dieser Zeile:

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

Was wäre das erwartete Ergebnis? Ich weiß, dass Kleinbuchstaben 'a' in Großbuchstaben 'A' geändert werden, aber wie geht es weiter? Würde die Originaldatei überschrieben, da die Umleitung auf denselben Dateinamen erfolgt?

tdharrison
quelle
Sie sollten eine bash: /etc/hosts: Permission deniedFehlermeldung erhalten (vorausgesetzt, Ihre Shell ist Bash), es sei denn, Sie führen dies als aus root. /etc/hostsist normalerweise nur von root beschreibbar. Wenn Sie dies so ausführen root(was Sie wirklich nicht tun sollten), würden Sie eine leere bekommen, /etc/hostswie Michael Homer erklärte.
Arielf

Antworten:

17

Das erwartete Ergebnis ist eine leere /etc/hostsDatei.

Die Umleitung > /etc/hostserfolgt und schneidet die Datei ab, bevor die Programme ausgeführt werden und traus der Datei gelesen werden.

Um die Ausgabe zu schreiben /etc/hosts, können Sie entweder mit einer Kopie der Datei arbeiten (oder Ihre Ausgabedatei anschließend an ihren Platz verschieben) oder den spongeBefehl von moreutils verwenden , der die Standardeingabe aufnimmt und in eine Datei schreibt:

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

In diesem Fall wird jeder „a“ in /etc/hostswird ersetzt mit „A“, werden alle Linien werden in umgekehrter Reihenfolge entsprechend Ihre locale sortieren , wird eine Leerzeile zwischen jeder Zeile eingefügt werden , und das Ergebnis wird in gestellt werden /etc/hosts.


Sie können auch nützlich finden:

Michael Homer
quelle
1
Vielen Dank, dass Sie klargestellt haben, was ich mit der Art und Weise, wie es geschrieben wurde, erwarten sollte und wie man es schreiben kann, um das erwartete Ergebnis zu erzielen.
tdharrison
moreutils ist eine wirklich großartige Tool-Suite
Robert Riedl