C shell
C shell (oznaczany skrótem csh) jest jedną z klasycznych powłok systemu operacyjnego Unix. Została opracowana w latach 1977‑1980 przez Billa Joa przy współpracy z Larrym Bellem w Laboratoriach Bell. Powłoka odznacza się składnią inspirowaną językiem C, co ułatwia pisanie skryptów osobom zaznajomionym z tym językiem.
Historia
Powstanie csh było odpowiedzią na potrzebę bardziej przyjaznej interakcji z systemem niż zapewniała Bourne shell (sh). Pierwsza wersja, znana jako csh, została udostępniona w 1978 roku jako część systemu BSD Unix. W latach 1986–1990 wprowadzono rozszerzoną wersję tcsh, która dodała funkcje takie jak edycja linii poleceń oraz uzupełnianie nazw plików.
Składnia i podstawowe konstrukcje
Składnia csh jest zbliżona do języka C, co widać w następujących elementach:
- Instrukcje warunkowe:
if (warunek) then … else … endif - Pętle:
while (warunek) … end,foreach zmienna (lista) … end - Definicja zmiennych:
set zmienna =wartość
Typowe polecenia systemowe są wywoływane tak samo jak w innych powłokach, a dodatkowe funkcje csh obejmują:
- Aliasowanie –
alias l 'ls -CF' - Historia poleceń – dostępna po naciśnięciu klawisza ↑
- Job control – obsługa procesów w tle za pomocą
&oraz poleceńbg,fg
Porównanie z innymi powłokami
W porównaniu do innych popularnych powłok, csh wyróżnia się następującymi cechami:
| Cecha | csh / tcsh | sh | Bash | KornShell (ksh) |
|---|---|---|---|---|
| Składnia przypominająca C | Tak | Nie | W pewnym stopniu | Częściowo |
| Wbudowana historia poleceń | Tak | Ograniczona | Tak | Tak |
| Uzupełnianie nazw plików | W tcsh | Nie | Tak | Tak |
| Rozbudowane aliasy | Tak | Ograniczone | Tak | Tak |
Implementacje i pochodne
Podstawowa wersja csh jest dostępna w wielu dystrybucjach BSD. Najbardziej rozpowszechnioną rozbudowaną implementacją jest tcsh, która dodaje:
- Rozbudowaną edycję linii poleceń (obsługa Emacsa oraz Vi)
- Dynamiczne podpowiedzi i kolorowanie składni
- Rozszerzone możliwości aliasowania
Przykłady użycia
Prosty skrypt w csh, wypisujący pliki w katalogu i liczbę ich wierszy:
#!/bin/csh
foreach plik (*)
echo -n "$plik: "
wc -l $plik | awk '{print $1}'
end
Przykład użycia aliasu:
alias ll 'ls -lF'
Zastosowania
Choć współcześnie Bash i Zsh dominują w środowiskach interaktywnych, csh pozostaje ważny w:
- Systemach legacy opartych na starszych wersjach BSD
- Środowiskach edukacyjnych, gdzie składnia przypominająca C ułatwia naukę programowania
- Skryptach konfiguracyjnych niektórych aplikacji naukowych
Wady i krytyka
Najczęściej wymieniane wady csh obejmują:
- Nieprzewidywalne zachowanie niektórych konstrukcji (np.
setvs.setenv) - Brak pełnej zgodności z POSIX, co utrudnia przenoszenie skryptów między systemami
- Mniej rozbudowane możliwości skryptowe niż w Bash czy ksh
Literatura i dalsza lektura
Klasyczną pozycją opisującą csh jest The C Shell Field Guide autorstwa Billa Joego. Dostępne są także podręczniki systemowe csh(1) oraz dokumentacja tcsh.