E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\12.DOC 239
Rozdzia³ 12. ¨ pdksh 239
Rick McMullin i Tim Parker
W tym rozdziale:
u Powłoka pdksh (Public Domain Korn Shell)
u Znaki zachęty
u Zarządzanie zadaniami
u Skróty klawiaturowe
u Dostosowywanie powłoki pdksh
u Polecenia wewnętrzne powłoki pdksh
u Zmienne powłoki pdksh
W poprzednim rozdziale omówiliśmy szczegóły pracy z powłoką bash. Ponieważ jednak nie każdy musi chcieć używać akurat tego interpretera, z Linuxem rozprowadzanych jest jeszcze kilka innych. Jednym z nich jest pdksh, odmiana powłoki Korn Shell (ksh). Omówimy tu w skrócie metody dostosowywania go do swoich potrzeb, najważniejsze polecenia i zmienne.
Interpreter Korn Shell, którego autorem jest David Korn, jest trzecią z powłok używanych najczęściej w systemach UNIX-owych. Został napisany później niż powłoki sh i csh, dzięki czemu łączy w sobie ich zalety. Nie jest jednak rozprowadzany razem z systemami UNIX-owymi, więc wiele osób po prostu nie miało okazji go poznać. Implementuje udogodnienia wprowadzone przez powłokę csh, a jednocześnie pozostaje całkowicie kompatybilny z powłoką sh. Wersja interpretera Korn Shell przeznaczona dla Linuxa jest dostępna za darmo i nazywa się właśnie pdksh.
Podczas wydawania polecenia jego pełne brzmienie często nie jest koniecznie do zrozumienia i prawidłowego zinterpretowania go. Dokańczanie poleceń pozwala na wpisanie tylko części polecenia, a następnie, po wciśnięciu odpowiedniej kombinacji klawiszy, interpreter próbuje dokończyć polecenie za Ciebie.
Domyślnie pdksh nie pozwala na używanie tego udogodnienia. Trzeba zażądać tego explicite, wydając jedno z poleceń:
set –o emacsset –o vi
Powodują one, że pdksh będzie reagował na kombinacje klawiszy tak, jak robią to edytory emacs lub vi. Wybierz ten edytor, z którym jesteś lepiej obeznany.
Większość ludzi uważa, że edytor emacs jest łatwiejszy w obsłudze niż vi.
W trybie vi, zanim użyjesz jakiegokolwiek polecenia edycyjnego, musisz wejść w tryb wydawania poleceń. Można to zrobić poprzez naciśnięcie klawisza Escape. Nie można wtedy jednak dopisywać do wiersza poleceń żadnego tekstu, najpierw należy przejść do trybu edycji (jest na to kilka sposobów, można na przykład wcisnąć klawisz i ‑ ang. insert – wstaw).
Kiedy dokańczanie poleceń jest uaktywnione, można go użyć wciskając dwukrotnie klawisz Escape (w trybie emacs) lub klawisz \ (w trybie vi). Przykładowo, jeśli w bieżącym katalogu znajdują się następujące podkatalogi i pliki:
News/ bin/ games/ mail/ sample.text test/
a chcesz edytować plik sample.text za pomocą edytora vi, możesz wydać polecenie
vi sample.text
Jednak już po wpisaniu pierwszej litery nazwy pliku nie ma wątpliwości, o który plik chodzi. Aby pdksh dokończył tę nazwę za Ciebie, wciśnij dwa razy klawisz Escape, jeśli używasz trybu emacs:
vi s<escape><escape>
Jeżeli używasz trybu vi, wciśnij klawisz \:
v s\
Rezultat dokończenia pojawi się na ekranie. Polecenie nie zostanie wykonane, dopóki nie zatwierdzisz go klawiszem Enter, dzięki czemu można sprawdzić, czy rzeczywiście chodziło Ci o postać polecenia podpowiadaną przez pdksh.
W przypadku, gdy plik sample.text nie jest jedynym plikiem o nazwie zaczynającej się na literę s, pdksh dopisuje znaki, co do których nie ma wątpliwości, po czym generuje krótki dźwięk, oznaczający konieczność wprowadzenia dodatkowych informacji.
Odpowiednikiem klawisza Escape jest kombinacja Control+[, oznaczana zazwyczaj jako ^[. Dwukrotne wciśnięcie klawisza Escape może być więc zapisane jako ^[^[. Taki zapis używany jest w wielu książkach i na stronach man.
Powłoka pdksh daje również możliwość używania w wierszu poleceń symboli wieloznacznych i, podobnie jak bash, obsługuje trzy ich rodzaje:
* zastępuje dowolny znak lub ciąg znaków,
? zastępuje dowolny pojedynczy znak,
[...] zastępuje dowolny znak zawarty pomiędzy nawiasami.
Znak * może być stosowany podobnie jak dokańczanie poleceń. Jeśli w bieżącym katalogu znajdują się następujące podkatalogi i pliki:
News/ bin/ mail/ test/ sample.text working/
a chcesz edytować plik sample.text edytorem vi, możesz wydać polecenie:
vi s*
Symbol * zastępuje dowolny znak lub ciąg znaków, więc interpreter poleceń zamienia s* na sample.text (jedyna nazwa pliku w tym katalogu, która pasuje do wzorca).
Metoda ta działa prawidłowo wtedy, gdy tylko jedna nazwa pliku zaczyna się na literę s. Jeśli jest ich więcej, wzorzec s* zostanie zastąpiony przez listę plików i podkatalogów rozpoczynających się na literę s. Podane wyżej polecenie spowoduje uruchomienie edytora vi z pierwszym plikiem z tej listy. Po zakończeniu jego edycji do edytora załadowany zostanie drugi plik itd. Metoda ta jest dobra, jeśli trzeba edytować więcej niż jeden plik. Jeśli natomiast zamierzałeś edytować tylko plik sample.text, trzeba to zrobić w inny sposób.
Bardziej praktyczne zastosowanie znaku * to wykonywanie poleceń na kilku plikach jednocześnie. Przykładowo, niech bieżący katalog zawiera następujące pliki i podkatalogi:
News/ bin/ games/ mail/ sample.text temp1.outtemp2.out temp3.out test/
Jeśli chcesz usunąć wszystkie pliki z rozszerzeniem .out, możesz to zrobić wydając polecenie
rm *.out
W tym przypadku pdksh zastąpi wzorzec *.out listą wszystkich plików z rozszerzeniem .out. Po wykonaniu tego podstawienia polecenie przyjmuje następującą postać:
rm temp1.out temp2.out temp3.out
Polecenie rm zostanie więc wywołane z argumentami temp1.out temp2.out temp3.out
Symbol ? działa na podobnych zasadach, z tym że zastępuje dokładnie jeden znak. Jeśli zawartość katalogu bieżącego jest taka sama jak w poprzednim przykładzie, pliki temp1.out temp2.out temp3.out można usunąć poleceniem
rm temp?.out
Symbol [...] pozwala bardziej szczegółowo określić, o jakie znaki lub zakresy znaków chodzi. By usunąć pliki jak wyżej, można wydać jedno z poleceń:
rm temp[123].out
rm temp[1-3].out
pdksh obsługuje przywoływanie wydanych wcześniej poleceń prawie w taki sam sposób, jak robi to interpreter bash. Pamięta on pewną liczbę ostatnio wydanych poleceń (określoną wartością zmiennej HISTSIZE).
Lista wydanych poleceń ładowana jest podczas logowania z pliku historii, którego nazwa przechowywana jest w zmiennej HISTFILE – domyślnie jest to plik .ksh_history znajdujący się w katalogu domowym. Nazwa ta, podobnie jak miało to miejsce w przypadku pliku .bash_history, rozpoczyna się od kropki. Oznacza to, że jest to plik ukryty i podczas przeglądania zawartości katalogu wyświetlony zostanie tylko w przypadku wyraźnego żądania, np. po wydaniu polecenia ls –a.
Interpreter daje możliwość poruszania się po liście wcześniej wydanych poleceń. Klawisze służące do tego celu różnią się w zależności od tego, czy używasz trybu edycji emacs, czy vi.
W przypadku trybu emacs, polecenie wydane wcześniej zostanie wyświetlone po naciśnięciu klawiszy Control+p, polecenie następne – Control+o. W trybie vi do poprzedniego polecenia wrócić można, wciskając klawisze K lub –, natomiast do następnego J lub +.
Jeśli używasz poleceń edytora vi, to zanim będziesz mógł przeglądać polecenia wydane wcześniej, musisz przejść do trybu wydawania poleceń (naciskając dwukrotnie klawisz Escape).
Jeśli zachodzi taka potrzeba, można edytować przywołane z listy polecenie. Interpreter pdksh udostępnia dość złożony zestaw funkcji służących do tego celu, jednak omawianie ich wykracza poza zakres tej książki. Przy wprowadzaniu niewielkich poprawek można z powodzeniem stosować najprostsze metody, na przykład użyć klawiszy kursora – strzałki w lewo i w prawo pozwalają poruszać się w obrębie jednego polecenia. Tekst można wstawiać w dowolnym miejscu polecenia i usuwać klawiszami Delete czy Backspace. Większość użytkowników uważa takie możliwości za wystarczające.
O wiele bardziej zaawansowane możliwości edycji dostępne są za pomocą kombinacji klawiszy takich, jak w edytorach vi oraz emacs (zależnie od wybranego trybu). Jeśli znasz dobrze któryś z tych edytorów, może to być pewnym udogodnieniem.
Plik historii poleceń można również edytować za pomocą polecenia fc (ang. fix command). Jeśli przeczytałeś rozdział 11. „bash”, pamiętasz na pewno, że interpreter bash obsługuje jeszcze jedno polecenie: history. Nie jest ono dostępne w powłoce pdksh, ponieważ wszystkie jego funkcje spełnia polecenie fc.
Choć polecenie history nie jest obsługiwane przez powłokę pdksh, działa ono poprawnie, ponieważ zazwyczaj w pliku konfiguracyjnym .kshrc zdefiniowany jest alias o następującej postaci:
alias history=’fc –l’
Pozwala on na normalne używanie polecenia ...
osyrius