Terminal pogryzł człowieka: wcd

Techniki poruszania się pomiędzy katalogami w terminalu zna każdy – komenda cd w połączeniu z autouzupełnianiem pod klawiszem Tab i zmieniamy nasze położenie nim ktoś zdąży powiedzieć ‘bułka z dżemem’. Jednak po jakimś czasie i taka prędkość przemieszczania się będzie dla nas za wolna, a na dodatek wśród natłoku katalogów nie zawsze wiemy o który nam chodzi. Stąd też zwolennicy zespalania synaps nerwowych z końcówkami interfejsu terminala… Nie, niestety – na to musimy jeszcze poczekać. Na razie możemy zastosować polecenie wcd, które znacznie przyśpieszy błądzenie po katalogach i odnajdywanie tych właściwych.

Polecenie wcd jest wzorowane na ncd, czyli programie dostępnym w The Norton Utilities. Zasada działania jest prosta – wcd zdejmuje z użytkownika konieczność pamiętania gdzie i jaki katalog jest położony. Przetrzymując w bazie danych lokalizacje w naszym katalogu domowym umożliwia przemieszczanie się pomiędzy nimi po podaniu niepełnej nazwy, a w przypadku występowania kilku katalogów o tej samej nazwie – wybór tego właściwego. Czyli zamiast klepać ‘cd ~/Pobrane/dystrybucje/nowe/2014/iso/’, wpiszemy ‘wcd iso’. Prawda, że szybciej i czytelniej?

Wcd zainstalujemy w każdej niemal dystrybucji wprost z repozytoriów. Jednak pierwszy rozczarowaniem będzie fakt, że nic się nie dzieje po wydaniu komendy wcd – w większości dystrybucji binarka ma bowiem nazwę wcd.exec (dlaczego – o tym za chwilę). Gdy już nawet wpiszemy wcd.exec katalog, to też niewiele się stanie, a już na pewno nie zmieni się nasze położenie w terminalu. O co chodzi?

Ze względów bezpieczeństwa i lokalnego traktowania plików każdego użytkownika z osobna, wcd zainstalowany globalnie w systemie musi być aktywowany na naszym koncie (naszym katalogu domowym). W tym celu musimy stworzyć katalog ~/bin, tam wykonać dowiązanie do binarki wcd.exec, oraz dodać odpowiednią funkcję w .bashrc, która będzie skrótem dla wcd.exec i jednocześnie wykonawcą naszych zamiarów. Tego się nie da ogarnąć? Nic bardziej mylnego:

mkdir ~/bin
ln -s /usr/bin/wcd.exec ~/bin/wcd.exec

I już mamy katalog ~/bin oraz odpowiednie dowiązanie. Czas na funkcję w .bashrc – edytujemy ten plik zwyczajowym np. gedit ~/.bashrc i dopisujemy gdzieś pod koniec:

function wcd
{
$HOME/bin/wcd.exec $*
. $HOME/bin/wcd.go
}

Zapisujemy. Po przelogowaniu możemy wykonać polecenie wcd (które wywoła naszą funkcję wcd, a ta właściwe wcd.exec). Skąd te komplikacje? Ponieważ do zmiany katalogów wcd wykorzystuje nadal cd (dla zachowania zgodności) i w tym celu po naszym wywołaniu wcd tworzony jest skrypt .go, który opisuje gdzie chcemy się przemieścić. Stąd funkcja, która wywoła najpierw wcd (i który utworzy plik wcd.go), a następnie wykonanie stworzonego pliku wcd.go. Ale w sumie – nieważne jak, ważne, że działa.

Jeżeli w naszym katalogu domowym występuje kilka nazw zbieżnych z parametrem jaki podaliśmy dla wcd, zostaną one wyświetlone w zgrabnej liście i po naciśnięciu odpowiedniego klawisza wybierzemy właściwy.

Aby wcd wiedział co w naszym katalogu piszczy, musimy nakarmić bazę danych katalogami znajdującymi się pod naszą kuratelą. Dlatego przed rozpoczęciem użytkowania wcd pierwsze polecenie powinno wyglądać:

wcd -A .

Rzecz jasna, bazę danych odświeżamy wg. naszego upodobania, ale z reguły wystarczy zrobić to tylko raz na samym początku.

Całą plejadę opcji otrzymamy po ‘wcd -h’, a najciekawsza może być opcja np. ‘-i’ dla zaniechania rozpoznawania wielkości liter.