encyklopedia.space

C shell

C shell (oznaczany skrótem csh) jest jedną z klasycznych powłok systemu operacyjnego Unix. Została opracowana w latach 19771980 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 19861990 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ą:

  • Aliasowaniealias 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. set vs. 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.