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


9

W tej linii:

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

jaki byłby oczekiwany wynik? Wiem, że małe litery „a” zmieniłyby się na wielkie litery „A”, ale co dalej? Czy oryginalny plik zostałby zastąpiony, ponieważ przekierowanie prowadzi do tej samej nazwy pliku?


Powinieneś otrzymać bash: /etc/hosts: Permission deniedbłąd (zakładając, że twoja powłoka to bash), chyba że używasz tego jako root. /etc/hostsjest zwykle zapisywalny tylko przez root. Jeśli prowadzisz to jako root(czego naprawdę nie powinieneś), dostaniesz puste, /etc/hostsjak wyjaśnił Michael Homer.
arielf

Odpowiedzi:


17

Oczekiwany wynik to pusty /etc/hostsplik.

Przekierowanie > /etc/hostsnastępuje i obcina plik, zanim programy zaczną działać i trzacznie czytać z pliku.

Aby zapisać dane wyjściowe /etc/hosts, możesz albo pracować z kopią pliku (lub później przenieść plik wyjściowy na miejsce), albo użyć spongepolecenia z moreutils , które wchłonie standardowe dane wejściowe i zapisze w pliku:

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

W takim przypadku każda litera „a” /etc/hostszostanie zastąpiona literą „A”, wszystkie linie zostaną posortowane w odwrotnej kolejności zgodnie z ustawieniami regionalnymi , pusta linia zostanie wstawiona między każdą linią , a wynik zostanie wstawiony /etc/hosts.


Przydatne mogą być również:


1
Dziękuję bardzo za wyjaśnienie, czego powinienem się spodziewać po sposobie, w jaki został napisany i jak można go napisać, aby osiągnąć oczekiwany rezultat.
tdharrison

moreutils to naprawdę świetny zestaw narzędzi
Robert Riedl
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.