Zgryźliwość kojarzy mi się z radością, która źle skończyła.









Rozdział 13.
tcsh









E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\13.DOC              253









Rozdzia³ 13. ¨ tcsh              253

Rick McMullin

W tym rozdziale:

u                                             Powłoka tcsh

u                                             Inne przydatne możliwości

u                                             Dostosowywanie powłoki tcsh

u                                             Polecenia wewnętrzne interpretera tcsh – podsumowanie

u                                             Zmienne powłoki tcsh

 

W dwóch poprzednich rozdziałach przedstawione zostały powłoki bash (Bourne Again Shell) oraz pdksh (Public Domain Korn Shell). W tym rozdziale omówimy trzecią powłokę dostępną w systemach linuxowych, czyli tcsh. Pokażemy niektóre sposoby dostosowywania tego interpretera do własnych potrzeb oraz najważniejsze wbudowane polecenia i zmienne.

Końcową część tego rozdziału poświęcimy na omówienie kilku interesujących możliwości interpretera tcsh, niedostępnych ani w powłoce bash, ani pdksh.

Powłoka tcsh

tcsh to zmodyfikowana wersja powłoki C (csh). Jest z nią całkowicie kompatybilna, a przy okazji dodaje kilka własnych rozszerzeń, ułatwiających i usprawniających pracę interaktywną, między innymi obsługę historii poleceń i poprawioną edycję wiersza poleceń.

Dokańczanie poleceń

Podobnie jak w powłokach pdksh i bash, w powłoce tcsh również możliwe jest automatyczne dokańczanie poleceń. Wywołuje się je, wciskając klawisz Tab, czyli tak samo jak w powłoce bash.

Po wciśnięciu klawisza Tab tcsh próbuje dokończyć polecenie, szukając pliku, którego nazwa pasuje do rozpoczętej, w katalogu, do którego polecenie się odnosi. Przyjmijmy przykładowo, że wpisałeś następujące polecenie:

 

emacs ksi<tab>

tcsh spróbuje dokończyć polecenie, szukając pliku (lub podkatalogu) w katalogu bieżącym, którego nazwa zaczyna się od liter ksi (np. ksiazka). Natomiast po wydaniu polecenia

 

emacs /usr/bin/ksi<tab>

tcsh będzie szukał odpowiedniego pliku lub podkatalogu w katalogu /usr/bin.

Oto inne przykłady użycia mechanizmu dokańczania poleceń. Załóżmy, że w katalogu bieżącym znajdują się następujące pliki i podkatalogi:

 

News/              bin/              mail/              test.txt              plik1              std.txt

Jeśli chcesz wydrukować plik test.txt, możesz wydać polecenie:

 

lpr test.txt

Można również zaoszczędzić sobie wpisywania kilku liter i użyć mechanizmu dokańczania poleceń, wciskając klawisz Tab:

 

lpr t<Tab>

tcsh spróbuje dokończyć wydawane polecenie. Ponieważ jedynym plikiem w bieżącym katalogu, którego nazwa zaczyna się na literę t, jest plik test.txt, interpreter dokończy polecenie w następujący sposób:

 

lpr test.txt

Można teraz zatwierdzić polecenie klawiszem Enter lub edytować je, jeśli nie chodziło Ci o to, co dopisał interpreter. Powinieneś bardzo uważać przy używaniu dokańczania poleceń z poleceniami takimi jak rm, ponieważ bardzo łatwo skasować jakieś dane przez pomyłkę.

Symbole wieloznaczne

Podobnie jak powłoki bash i pdksh, również tcsh pozwala używać symboli wieloznacznych. Obsługiwane są 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ć używany w sposób podobny do dokańczania poleceń. Jeśli wydasz polecenie

 

cd t*

a w katalogu bieżącym znajduje się tylko jeden podkatalog, którego nazwa zaczyna się na literę t, polecenie to zachowa się dokładnie tak samo, jak gdyby użyto dokańczania poleceń, wciskając klawisz Tab.

Symbol * zastępuje dowolny znak lub ciąg znaków, więc interpreter w miejsce t* podstawi nazwę pliku lub podkatalogu, która pasuje do wzorca – czyli rozpoczyna się na t.

Metoda ta działa prawidłowo wtedy, gdy tylko jedna nazwa podkatalogu zaczyna się na literę t. Jeśli jest ich więcej, wzorzec t* zostanie zastąpiony przez listę plików i podkatalogów rozpoczynających się na literę t. Polecenie cd spowoduje przejście do pierwszego katalogu z tej listy, który nie musi być katalogiem, o który chodziło.

Bardziej praktyczne zastosowanie znaku * to wykonywanie poleceń na kilku plikach jednocześnie. Przykładowo, niech bieżący katalog zawiera następujące pliki:

 

Mail/              atc1.stk              atc2.stk              bin/              borl.stk              cdrom.txt
å              lfi.stk              temp/

Jeśli chcesz wydrukować dwa pliki z rozszerzeniem .stk, których nazwy zaczynają się od liter atc, możesz wydać polecenie

 

lpr a*.stk

Zadziała ono prawidłowo, ponieważ w katalogu nie ma innych plików o nazwach zaczynających się na a i z rozszerzeniem .stk.

Można również wydrukować te dwa pliki, używając symbolu ? w następujący sposób:

 

lpr atc?.stk

Trzecim sposobem jest zastosowanie symbolu [], który pozwala określić zakres znaków:

 

lpr atc[12].stk

Przywoływanie wydanych poleceń

Mechanizm przywoływania wydanych poleceń jest podobny jak w obu opisanych w poprzednich rozdziałach powłokach. tcsh przechowuje informacje o pewnej liczbie wprowadzonych wcześniej poleceń. Liczba ta określona jest przez wartość zmiennej history.

Kiedy logujesz się do systemu, lista poleceń ładowana jest z pliku historii – domyślnie jest to plik o nazwie .history, znajdujący się w katalogu domowym. Jego nazwa przechowywana jest w zmiennej histfile i może zostać zmieniona. Zauważ, że rozpoczyna się ona od kropki, czyli jest nazwą pliku ukrytego, wyświetlaną podczas przeglądania zawartości katalogu tylko na wyraźne żądanie, np. po wydaniu polecenia ls –a.

 

Jeśli chcesz, by historia poleceń była zapisywana do pliku przy wylogowywaniu się, powinieneś się upewnić, czy wartość zmiennej savehist jest ustawiona na taką liczbę poleceń, jaką chcesz przechowywać. Przykładowe ustawienia możesz znaleźć na wydruku zawartości pliku .login w podrozdziale „Dostosowywanie tcsh”.

Najprostszą metodą dostępu do wydanych wcześniej poleceń jest użycie klawiszy kursora. Strzałka w górę powoduje przywołanie polecenia poprzedniego, w dół – następnego. Jeśli wciskając klawisz ze strzałką w górę przez przypadek ominiesz polecenie, o które Ci chodziło, możesz do niego wrócić, naciskając klawisz ze strzałką w dół.

Polecenie znajdujące się w wierszu poleceń może również być edytowane. Służą do tego celu strzałki w lewo i prawo oraz klawisze Backspace i Delete. Większość użytkowników uważa takie możliwości za wystarczające. Bardziej zaawansowane kombinacje klawiszy (podobne do kombinacji używanych w edytorach emacs i vi) opisane są w podrozdziale „Skróty klawiaturowe”.

Innym sposobem używania historii poleceń jest jej przeglądanie i edytowanie za pomocą polecenia history. Polecenie to można wywołać na dwa sposoby. Pierwszy z nich ma składnię

 

history [-hr] [n]

Polecenie o takiej składni służy do wyświetlania listy wydanych wcześniej poleceń na ekranie. Użycie parametru n pozwala określić liczbę ostatnio wydanych poleceń, które należy wyświetlić (jeśli jej nie podano, wyświetlone zostaną wszystkie zapamiętane polecenia). Opcja –h powoduje, że nie zostaną wyświetlone numery wierszy i czas wydania polecenia. Opcja –r wyświetla listę w odwrotnym porządku, rozpoczynając od poleceń wydanych najpóźniej. Ostatnie pięć poleceń można na przykład obejrzeć wydając polecenie

 

history 5

Drugi sposób służy do modyfikowania zawartości pliku historii. Ma on składnię:

 

history –S|-L|-M [nazwa_pliku]

Opcja –S zapisuje aktualną listę poleceń do pliku, -L powoduje dołączenie zawartości pliku historii do aktualnej listy poleceń, natomiast –M dołącza zawartość pliku historii do aktualnej listy, sortując ją jednocześnie według czasu wydania polecenia.

 

Jeśli nazwa pliku nie zostanie jawnie podana, użyta zostanie nazwa przechowywana w zmiennej histfile. Jeśli zmienna taka nie jest zdefiniowana, użyta zostanie nazwa ~/.history.

Można również uruchomić polecenie history z opcją –c, co powoduje usunięcie bieżącej historii poleceń.

Oprócz polecenia history interpreter tcsh oferuje również inne metody dostępu do poprzednio wydanych poleceń. Oto przykłady:

!n              wykonuje ponownie polecenie o numerze n w liście historii poleceń,

!-n              wykonuje ponownie polecenie, które jest n-te od końca w liście historii poleceń,

!!              wykonuje ponownie ostatnio wydane polecenie,

!c              wykonuje ponownie ostatnie polecenie z historii poleceń, które zaczyna się na literę c,

!?c?              wykonuje ponownie ostatnie polecenie, które zawierało literę c.

Polecenia te pozwalają na zmianę wyrazów bądź liter w poprzednio wydanych poleceniach, umożliwiają również dodanie jakiegoś parametru do wydanego wcześniej polecenia.

Więcej informacji na ten temat możesz znaleźć na stronach man poświęconych powłoce tcsh, które można obejrzeć po wydaniu polecenia:

 

man tcsh

Aliasy

Aliasy to skróty dłuższych, często używanych poleceń, służące wygodzie użytkownika. Przykładowo, jeśli wykonasz następujące polecenie:

 

alias ls 'ls –F'

to za każdym razem, gdy wydasz polecenie ls, wykona się zamiast niego polecenie ls –F.

Jeśli zdecydujesz, że dany alias nie będzie już więcej potrzebny, możesz go usunąć poleceniem

 

unalias:
unalias ls

Po wydaniu tego polecenia alias przestaje istnieć. Jeśli jego nazwa nie była równocześnie nazwą jakiegoś polecenia, próba wywołania go spowoduje błąd.

Najczęściej używane aliasy to:

 

alias ll 'ls –l'
alias ls 'ls –F'

Jeśli jesteś użytkownikiem systemu DOS, aliasy emulujące niektóre polecenia tego systemu mogą ułatwić Ci pracę:

 

alias dir 'ls'
alias copy 'cp'
alias rename 'mv'
alias md 'mkdir'
alias rd 'rmdir'

 

Podczas definiowania aliasów cudzysłowy niezbędne są tylko wtedy, gdy polecenie zastępowane aliasem zawiera spacje lub inne znaki specjalne.

Polecenie alias bez żadnych argumentów powoduje wypisanie wszystkich zdefiniowanych aliasów, na przykład tak:

 

alias ls 'ls –F'
alias dir 'ls'
alias ll 'ls –l'
alias md 'mkdir'
alias rd 'rmdir'

...
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • hannaeva.xlx.pl