Rozdział 13.
tcsh
Rick McMullin
W tym rozdziale:
Powłoka tcsh
Inne przydatne możliwości
Dostosowywanie powłoki tcsh
Polecenia wewnętrzne interpretera tcsh - podsumowanie
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'
Przekierowanie wejścia i wyjścia
Standardowe wejście i wyjście polecenia może być przekierowane w taki sam sposób, jak przy użyciu powłok omawianych poprzednio. Do przekierowania wejścia używa się operatora <, natomiast wyjścia - operatora >. Poniższe polecenie spowoduje przeadresowanie wejścia polecenia cat do pliku .cshrc, czyli wyświetlenie na ekranie zawartości tego pliku:
cat <.cshrc
Można oczywiście wyświetlić zawartość tego pliku, wydając polecenie cat .cshrc. Dlatego przekierowanie wejścia jest używane dość rzadko.
Znacznie częściej w praktyce używa się przekierowania wyjścia. Poniższe polecenie powoduje przeadresowanie wyjścia polecenia cat do pliku cshenv, czyli przesłanie do tego pliku połączonej zawartości plików .cshrc oraz .login:
cat .cshrc .login > cshenv
|
Plik, do którego przekierowane jest wyjście polecenia, jest tworzony, jeśli nie istnieje, natomiast jeśli istnieje, jego zawartość jest usuwana bez żadnego ostrzeżenia. |
Ciągi poleceń
Implementacja ciągów poleceń (ang. pipelines), z jaką mamy do czynienia w powłoce tcsh, nie różni się niczym z punktu widzenia użytkownika od implementacji w poprzednio omówionych powłokach. Pozwala ona na „szeregowe łączenie” poleceń. Wyjście polecenia zostaje skierowane na wejście następnego, jego wyjście z kolei na wejście następnego itd.; wynik wykonania ostatniego polecenia wyświetlany jest na ekranie (chyba że wyjście ostatniego polecenia zostanie skierowane do pliku).
Aby utworzyć taki ciąg, należy wpisać nazwy kolejnych poleceń rozdzielone znakami |; przykładem zastosowania tego mechanizmu może być ciąg poleceń
cat plik1 plik2 | wc -l
Polecenie cat połączy zawartości plików plik1 i plik2, po czym prześle je na wyjście. Ponieważ wyjście tego polecenia jest połączone z wejściem programu wc - potraktuje on połączone pliki jako dane wejściowe, zliczając występujące w nich wiersze. Wynik działania polecenia wc - łączna liczba wierszy w obu plikach - zostanie wyświetlony na ekranie.
Znak zachęty
tcsh posiada trzy poziomy znaków zachęty. Znak zachęty pierwszego poziomu wyświetlany jest, gdy interpreter oczekuje na wprowadzenie polecenia. Domyślnie jest to znak %. Można go zmodyfikować poprzez nadanie nowej wartości zmiennej prompt, na przykład tak:
set prompt="%t$"
Powyższe polecenie spowoduje, że jako znak zachęty wyświetlany będzie aktualny czas oraz znak dolara.
Znak zachęty drugiego poziomu pojawia się, gdy tcsh oczekuje na wprowadzenie danych, działając w pętli while albo for (pętli tych używa się przy programowaniu w języku powłoki, temat ten omówiony jest dokładniej w rozdziale 14. „Programowanie w języku powłoki”). Domyślnie znakiem zachęty drugiego poziomu jest %R?, gdzie %R jest specjalnym kodem powodującym wyświetlenie statusu interpretera. Postać znaku zachęty drugiego poziomu przechowywany jest jako wartość zmiennej prompt2, można ją zmienić na przykład tak:
set prompt2="?"
Znak zachęty trzeciego poziomu wyświetlany jest, gdy działa automatyczna korekta błędów. Jego postać jest określona wartością zmiennej prompt3, domyślnie jest to wartość CORRECT>%R (y|n|e)?. Jeśli chcesz dowiedzieć się więcej na ten temat, zajrzyj do podrozdziału „Poprawianie pomyłek powstałych podczas pisania”.
tcsh obsługuje symbole specjalne, które mają określone znaczenie, gdy znajdą się w jednej ze zmiennych prompt. Najczęściej używane wraz z opisem działania zebrano w tabeli 13.1.
Tabela 13.1. Symbole specjalne używane w definicjach znaków zachęty powłoki tcsh
Symbol |
Znaczenie |
%/ |
Wyświetla nazwę bieżącego katalogu |
%h, %!, ! |
Wyświetlają bieżący numer polecenia w historii poleceń |
%t, %@ |
Wyświetlają aktualny czas |
%n |
Wyświetla identyfikator użytkownika |
%d |
Wyświetla dzień tygodnia |
%w |
Wyświetla nazwę bieżącego miesiąca |
%y |
Wyświetla bieżący rok |
Przykładowe polecenie:
set prompt="%h %/"
powoduje, że jako znak zachęty pierwszego poziomu wyświetlany będzie aktualny numer polecenia w historii poleceń oraz nazwa bieżącego katalogu.
Zarządzanie zadaniami
Zarządzanie zadaniami to zdolność kontrolowania zachowań aktualnie działających procesów. Mówiąc konkretniej, jest to możliwość uśpienia (wstrzymania, ang. suspend) działającego procesu i późniejszego uruchomienia go. Interpreter bash śledzi wszystkie uruchamiane procesy (uruchamiane przez użytkownika, nie przez inne procesy) i pozwala je wstrzymywać oraz przywracać w dowolnej chwili.
Wciśnięcie klawiszy Control+Z powoduje wstrzymanie działającego procesu. Polecenie bg uruchamia go ponownie w tle, natomiast polecenie fg - na pierwszym planie.
Polecenia te są najczęściej używane w przypadku, gdy użytkownik pomyłkowo uruchomi na pierwszym planie program, który miał zostać uruchomiony w tle. Program uruchomiony na pierwszym planie blokuje dostęp do interpretera poleceń i nie pozwala użytkownikowi na zrobienie czegokolwiek aż do momentu zakończenia swojego działania. Zazwyczaj nie jest to problemem, ponieważ większość poleceń potrzebuje na zakończenie działania co najwyżej kilku sekund, ale w przypadku programów, które działają długo, wygodniej jest uruchomić je w tle, by móc nadal używać interpretera tcsh.
Jeśli na przykład na pierwszym planie uruchomisz polecenie
find / -name "test" >find.out
(które przeszukuje cały system plików w poszukiwaniu pliku o nazwie test, wysyłając wyniki do pliku find.out), na wyniki będziesz musiał poczekać od kilkunastu sekund do kilku minut, zależnie od wielkości systemu plików. W takim przypadku można wcisnąć klawisze Control+Z, co spowoduje wstrzymanie programu find, a następnie wydać polecenie bg, które uruchomi go ponownie w tle, dzięki czemu można będzie znów używać interpretera poleceń.
Skróty klawiaturowe
Podobnie jak pdksh, tcsh umożliwia zmianę istniejących i dodawanie nowych skrótów klawiaturowych (ang. key bindings). Rozwiązania zastosowane w interpreterze tcsh są jednak bardziej elastyczne i wygodniejsze.
Możliwe jest zdefiniowanie klawisza skrótu wywołującego dowolny program, nie tylko polecenie wewnętrzne. Dzięki temu można na przykład przypisać do poszczególnych klawiszy polecenia edycyjne edytora vi, podczas gdy pdksh umożliwiał przypisywanie wyłącznie poleceń edytora emacs.
Możliwość tworzenia własnych skrótów klawiaturowych może okazać się również bardzo przydatna, gdy przyzwyczajony jesteś do edytora innego niż vi lub emacs. Składnia polecenia definiującego skrót klawiaturowy ma następującą postać:
bindkey [opcja] <tekst_pierwotny lub nazwa_klawisza> <tekst_wyjściowy lub polecenie>
Opcje polecenia bindkey nie są omawiane w tej książce. Jeśli chcesz się czegoś o nich dowiedzieć, zajrzyj na strony man dotyczące interpretera tcsh. Podstawową funkcją tego polecenia jest wiązanie kombinacji klawiszy podanej jako pierwszy argument z poleceniem, podanym jako drugi argument.
Tabela 13.2 zawiera listę najbardziej przydatnych poleceń, które warto powiązać z jakimiś klawiszami, oraz klawisze, do jakich są one przyporządkowane domyślnie. Listę wszystkich poleceń powiązanych z kombinacjami klawiszy możesz uzyskać wpisując polecenie bindkey bez żadnych parametrów.
Polecenia te pozostają bez zmian bez względu na to, czy pracujesz w trybie emacs czy w trybie wstawiania vi. Powłoka tcsh obsługuje również wiele innych poleceń edycyjnych. Informacje o nich znajdziesz na stronach man.
Oto przykłady poleceń definiujących skróty klawiaturowe:
bindkey ^W kill-whole-line
bindkey ^S beginning-of-line
Tabela 13.2. Najczęściej wykorzystywane polecenia edycyjne powłoki tcsh
Polecenie |
Znaczenie |
beginning-of-line (^A) |
Przesuwa kursor na początek wiersza poleceń |
backward-char (^B) |
Przesuwa kursor o jeden znak do tyłu |
end-of-line (^E) |
Przesuwa kursor na koniec bieżącego wiersza |
forward-char (^F) |
Przesuwa kursor o jeden znak do przodu |
backward-delete-char (^H) |
Usuwa znak na lewo od kursora |
kill-line (^K) |
Usuwa bieżący wiersz |
clear-screen (^L) |
Czyści ekran tekstowy |
down-history (^N) |
Przesuwa o jeden wiersz w dół listę historii poleceń |
up-history (^P) |
Przesuwa o jeden wiersz w górę listę historii poleceń |
kill-whole-line (^U) |
Usuwa wszystkie znaki z bieżącego wiersza |
Inne przydatne możliwości
tcsh posiada kilka cech, których nie ma żaden z omawianych wcześniej interpreterów. Poniższe podrozdziały omawiają najbardziej przydatne z nich.
Poprawianie pomyłek powstałych w trakcie pisania
Ta cecha, niedostępna w żadnym z pozostałych interpreterów omawianych w tej książce, jest dla niektórych użytkowników (włączając mnie) bez wątpienia spełnieniem marzeń. Jeśli prześladują Cię przypadkowo wciśnięte klawisze, możliwe, że tylko ta cecha sprawi, że będziesz używał tcsh. Można zażądać poprawiania błędów popełnionych w trakcie wydawania polecenia (przed jego zatwierdzeniem), można również zażyczyć sobie, by były one poprawiane w przypadku, gdy polecenie nie zostanie rozpoznane prawidłowo.
Pierwsza możliwość nie jest zbyt przydatna, ponieważ musisz zorientować się, że popełniłeś błąd, zanim skończysz wpisywać polecenie. Można ją wywołać, wciskając klawisze Esc+S w wierszu poleceń przed wciśnięciem klawisza Enter.
Załóżmy na przykład, że chcesz zmienić katalog na /usr/X386/X11/bin, ale zamiast tego udało Ci się wpisać
cd /usr/X386/X11/bun
Jeśli zorientowałeś się, że popełniłeś błąd, zanim wcisnąłeś Enter, możesz wcisnąć klawisze Esc+S. tcsh poprawi polecenie na:
cd /usr/X386/X11/bin
Teraz można zatwierdzić je klawiszem Enter. Oczywiście poprawianie błędów ma swoje ograniczenia, ponieważ powłoka nie potrafi czytać w myślach użytkownika, mimo to z większością prostych literówek radzi sobie zaskakująco dobrze.
Drugą metodą jest poinstruowanie tcsh, by uruchamiał poprawianie błędów w sytuacji, gdy nie potrafi rozpoznać polecenia. Można zażądać, by poprawiane były nazwy poleceń lub całe polecenia (wraz z argumentami), ustawiając odpowiednio wartość zmiennej correct, np.:
set correct=cmd lub
set correct=all
Przy takich ustawieniach, gdy interpreter natknie się na polecenie, którego nie rozumie, spróbuje je poprawić. Jeśli uda mu się ustalić, w którym miejscu popełniłeś błąd, wyświetli poprawioną wersję polecenia, umożliwiając zatwierdzenie lub odrzucenie jej. Jeśli na przykład zmienna correct ma wartość all i wydane zostanie polecenie:
cd /usr/gmes
tcsh wyświetli następujące zapytanie:
CORRECT>cd /usr/games (y|n|e)?
Jeśli po takiej reakcji powłoki wciśniesz klawisz y (yes), wykonane zostanie polecenie w wersji poprawionej. Jeśli wciśniesz n (no), zostanie wykonane polecenie wpisane pierwotnie, co najprawdopodobniej spowoduje wyświetlenie komunikatu o błędzie. Wciśnięcie klawisza e (edit) powoduje powrót do edycji wiersza poleceń, umożliwiając ręczne poprawienie popełnionych błędów.
Prepolecenia
Prepolecenia są sposobem na to, by interpreter wywołał zadane polecenie przed każdym wyświetleniem znaku zachęty. Polecenie, które ma być wykonywane, określone jest przez wartość zmiennej precmd. Jeśli zmiennej precmd przypisano jakąś wartość, jest ona interpretowana jako polecenie, które wykonywane jest każdorazowo przed wyświetleniem na ekranie znaku zachęty. Przykładowo, po wydaniu polecenia
alias precmd time
przed każdym pojawieniem się znaku zachęty wywołane zostanie polecenie time.
Polecenia wykonywane przy zmianie katalogu
tcsh umożliwia również zdefiniowanie polecenia, które będzie wykonywane za każdym razem, gdy zmieniany jest katalog bieżący (zwykle w wyniku wydania polecenia cd). Ten typ polecenia jest wykorzystywany częściej niż prepolecenia, ponieważ pozwala na uzyskanie jakiegoś typu informacji o katalogu, do którego wchodzisz.
Polecenie wykonywane przy zmianie katalogu określone jest przez wartość zmiennej cwdcmd. Często na przykład używa się tu polecenia pwd, które powoduje, że po każdej zmianie katalogu wyświetlana jest pełna ścieżka dostępu do niego. Aby uzyskać taki efekt, należy wydać polecenie:
alias cwdcmd 'pwd'
|
Wartość zmiennej cwdcmd nie powinna wskazywać na polecenie cd, ponieważ może to spowodować, że interpreter tcsh wpadnie w nieskończoną pętlę i stracisz nad nim kontrolę. |
Monitorowanie sesji
tcsh udostępnia mechanizm, który pozwala obserwować każde logowanie się i wylogowywanie dowolnego użytkownika. Jest to możliwe dzięki istnieniu zmiennej watch.
Wartość tej zmiennej składa się z par identyfikator użytkownika - numer terminalu. Mogą one zawierać symbole wieloznaczne oraz słówko any (ang. dowolny). Składnia polecenia definiującego wartość zmiennej watch jest następująca:
set watch=(<id_użytkownika> <terminal>)
terminal jest w tym przypadku nazwą odpowiedniego urządzenia w systemie Linux, natomiast id_uzytkownika to identyfikator użytkownika, którego poczynania chcesz obserwować.
Większość użytkowników korzysta z tej możliwości, by obserwować, kiedy logują się ich przyjaciele. Przykładowo, jeśli czekasz na osobę o identyfikatorze jas, możesz wydać polecenie
set watch=(jas any)
dzięki któremu tcsh poinformuje Cię, gdy jas zaloguje się do systemu. Domyślnie sprawdzanie następuje co 10 minut, można zmienić tę wartość przez podanie liczby minut pomiędzy sprawdzeniami przed parą identyfikator użytkownika - numer terminalu, w następujący sposób:
set watch=(5 jas any)
Bądź ostrożny przy wydawaniu tego typu poleceń w wolnych systemach lub w systemach o dużej liczbie użytkowników, ponieważ sam przyczyniasz się wtedy do przeciążania systemu. Używanie tego polecenia przez krótki okres czasu dla jakiegoś określonego celu nikomu nie zaszkodzi, ale używane bez przerwy powoduje niepotrzebne obciążanie systemu.
Dostosowywanie tcsh
W tym rozdziale przedstawiliśmy już wiele sposobów na to, by dostosować powłokę tcsh do swoich potrzeb. Aby wprowadzone zmiany były permanentne, musisz zapisać je do pliku, który jest przetwarzany podczas każdego uruchomienia interpretera tcsh.
|
Nawet drobna pomyłka w pliku konfiguracyjnym tcsh może spowodować problemy podczas logowania się. Z tego względu powinieneś robić kopie zapasowe edytowanych plików i uważnie sprawdzać każdą wprowadzoną modyfikację. |
Powłoka tcsh używa podczas inicjalizacji dwóch plików. Pierwszy z nich to csh.login, który znajduje się w katalogu /etc. Jeśli chcesz zmieniać zawarte w nim ustawienia, powinieneś najpierw skopiować go do katalogu domowego. Oto przykładowa zawartość tego pliku:
if ($?prompt) then
#this means that the shell is interactive
umask 022
set cdpath = ( /usr/spool )
set notify
set history = 100
set histfile = .history
#The savehist variable is set to tell tcsh to
#save the history list to the history file on
#logout. The value of 25 means that tcsh will
#save the last 25 commands to the history file.
set savehist=25
setenv OPENWINHOME /usr/openwin
setenv MANPATH /usr/local/man:/usr/man/preformat:/usr/man:/usr/X11/man: */usr/openwin/man
setenv MINICOM "-c on"
setenv HOSTNAME "`cat /etc/HOSTNAME`"
set path = ( $path /usr/X11/bin /usr/andrew/bin $OPENWINHOME/bin */usr/games . )
endif
#I had problems with the Backspace key installed by 'tset'
#but you might want to try it anyway, instead of the
#'setenv term .....' below it.
#eval `tset -sQ „$term"`
#setenv term console
if ! $?TERM setenv TERM console
set prompt = "%m:%~%# "
alias ls 'ls -F'
if ( { tty - -silent } ) then >& /dev/null
echo ""; fortune; echo ""
endif
Drugim z plików inicjalizacyjnych jest plik csh.cshrc, który również znajduje się w katalogu /etc. Podobnie jak w poprzednim przypadku, by dokonywać w nim jakichś zmian, powinieneś najpierw skopiować go do katalogu domowego.
Podczas logowania interpreter tcsh wykonuje polecenia zapisane w pliku /etc/ csh.cshrc, a następnie /etc/csh.login. Po czym sprawdza, czy posiadasz w katalogu domowym własną kopię pliku csh.cshrc. Musi się ona nazywać .cshrc lub .tcshrc. Jeśli któryś z tych plików istnieje, wykonywane są polecenia w nim zapisane.
Następnie tcsh sprawdza, czy w katalogu domowym znajduje się kopia pliku csh.login. Musi się ona nazywać .login. Jeśli plik istnieje, zostaje wykonywany.
Kiedy uruchamiana jest następna kopia interpretera tcsh, odbywa się podobna procedura, z tym że nie są przetwarzane pliki csh.login ani .login.
Polecenia wewnętrzne interpretera tcsh - podsumowanie
W tabeli 13.3 zebrano najczęściej używane polecenia powłoki tcsh wraz z ich krótkim opisem.
Tabela 13.3. Najczęściej wykorzystywane polecenia powłoki tcsh
Polecenie |
Znaczenie |
alias |
Pozwala definiować i wyświetlać zdefiniowane aliasy |
bg |
Powoduje, że wstrzymany proces uruchamia się ponownie w tle |
bindkey |
Pozwala na zmianę reakcji powłoki na kombinacje klawiszy |
cd |
Przechodzi do katalogu określonego jako argument |
exit |
Kończy pracę powłoki |
fg |
Powoduje, że wstrzymany proces uruchamia się ponownie na pierwszym planie |
history |
Pozwala użytkownikowi na przeglądanie i edycję historii poleceń |
kill |
Używane do zatrzymywania procesów |
logout |
Kończy pracę powłoki uruchomionej podczas logowania |
set |
Służy do ustawiania wartości zmiennych tcsh |
source |
Odczytuje i wykonuje zawartość pliku - polecenie omówione szerzej |
unalias |
Używane do usuwania istniejącego aliasu |
Zmienne powłoki tcsh
W tabeli 13.4 zebrane zostały najważniejsze zmienne wraz z krótkim opisem ich znaczenia.
Tabela 13.4. Najczęściej wykorzystywane zmienne powłoki tcsh
Nazwa zmiennej |
Znaczenie |
autocorrect |
Jeśli zmienna ta jest zdefiniowana, tcsh będzie automatycznie poprawiał literówki w wierszu poleceń |
histfile |
Nazwa pliku, w którym przechowywana będzie historia poleceń |
history |
Rozmiar historii poleceń |
home |
Katalog domowy bieżącego użytkownika |
path |
Ścieżka przeszukiwania |
prompt |
Znak zachęty pierwszego poziomu |
prompt2 |
Znak zachęty drugiego poziomu (wyświetlany, gdy interpreter działa w pętli) |
prompt3 |
Znak zachęty trzeciego poziomu (wyświetlany, gdy interpreter próbuje poprawić literówkę) |
savehist |
Liczba poleceń, które mają być zapisywane w pliku historii |
watch |
Zbiór par użytkownik-terminal pozwalających obserwować logowanie i wylogowywanie się użytkowników |
Podsumowanie
W ostatnich trzech rozdziałach przedstawiliśmy podstawowe zagadnienia związane z używaniem trzech najpopularniejszych linuxowych interpreterów poleceń powłoki. Najbogatszym i najbardziej elastycznym z nich jest tcsh, co wcale nie oznacza, że właśnie jego powinieneś używać.
Następny rozdział podejmuje zagadnienia związane z językami programowania wbudowanymi w powłoki. Możesz również przejść do innych rozdziałów.
Używanie edytorów tekstów omówione jest w rozdziale 16. „Edytory tekstu: vi i emacs”.
Drukowanie w systemie Linux jest tematem rozdziału 20. „Drukowanie”.
254 Część II ♦ Poznawanie Linuxa
254 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\13.DOC
E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\13.DOC 253
Rozdział 13. ♦ tcsh 253