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?


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:


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.