Moreutils to pakiet 15 dodatkowych narzędzi do basha. Wszystkie są ciekawe, a część z nich potrafi być bardzo użyteczna. Tym razem będzie o niezwykle przydatnym poleceniu sponge
oraz bardzo ciekawej koncepcji vipe
.
Ten artykuł stanowi kontynuację wcześniejszego tekstu na temat pakietu moreutils.
Instalacja
Pakiet moreutils nie jest domyślnie zainstalowany w systemie i trzeba go sobie doinstalować – w zależności od dystrubucji:
$ sudo pacman -S moreutils
$ sudo dnf install moreutils
$ sudo yum install moreutils
$ sudo apt-get install moreutils
Sponge – po co komu gąbka w systemie plików
W Linuksie często mamy do czynienia z plikami tekstowymi. Nierzadko te pliki trzeba modyfikować. Niektóre polecenia pozwalają zmienić zawartość pliku na dysku (np. sed z opcją -i), a niektóre nie – przykładem niech będzie często stosowane polecenie sort. Wpisanie w konsoli
$ sort plik.txt > plik.txt
koczy się tym, że plik.txt ma zerową długość, ponieważ nie można jednocześnie czytać z pliku i zapisywać do niego.

Dokładnie tak samo będzie, kiedy spróbujemy użyć potoku:
$ cat plik.txt | sort > plik.txt
plik.txt również zostanie zniszczony.
I tu wkracza sponge
. Zadaniem programu jest przechwycenie całego wyjścia, zmagazynowanie i zapisanie we wskazanym pliku, kiedy ten będzie już dostępny do zapisu:
$ sort plik.txt | sponge plik.txt
Wynik sortowania, przekierowany do potoku, jest „wsysany” przez gąbkę, a kiedy już plik zostanie zwolniony, „wyciskany” do niego.

Ot i cała filozofia. Pomysł jest niezwykle prosty, ale muszę przyznać, że w praktyce pracy z bashem przydaje się bardzo często. Zamiast tworzyć pliki tymczasowe, przepuszcza się wynik działania poleceń przez sponge bez ryzyka utraty danych.
Vipe – między wódkę a zakąskę
Wpychanie się pomiędzy ciasno dopasowane części procesu to nie zawsze jest dobry pomysł. Niemniej czasem warto zajrzeć tu i tam, by przekonać się czy wszystko idzie dobrze albo poprawić szczegóły.
Vipe jest programem, który umożliwia edycję danych przekazywanych do potoku „w locie”.
Używany jest domyślny edytor – w Ubuntu jest to nano. Można użyć innego edytora jeśli zdefiniuje się zmienną EDITOR (definiowanie edytora zostało dokładniej opisane w pierwszej części serii).
Zobaczmy jak to działa:
$ cat plik.txt | vipe | sponge plik.txt



Trzeba przyznać, że nie jest to często używane narzędzie, ale bardzo się przydało np. przy sortowaniu i edycji słownika, który wymagał ręcznej ingerencji – i można to było zrobić pomiędzy sortowaniem, a usunięciem duplikatów.
To jeszcze nie wszystkie przydatne programy, które znajdują się w pakiecie moreutils. Wkrótce opis kolejnych.