Co to jest csh?
Autor: Redakcja Domeny.ForSale Opublikowano
W skrócie: csh, czyli C shell, to powłoka systemowa: program, który interpretuje wpisywane polecenia i uruchamia inne programy w systemach Unix oraz pokrewnych. Pozwala pracować interaktywnie i wykonywać skrypty, a jej składnia częściowo przypomina język C. Możesz spotkać ją w starszych środowiskach, narzędziach technicznych i istniejących skryptach; do nowego skryptu administracyjnego zwykle praktyczniejszy będzie Bash lub sh.
Do czego służy csh i czym różni się od terminala?
Terminal to interfejs tekstowy, w którym wpisujesz polecenia i odczytujesz wyniki. Powłoka działa wewnątrz tego środowiska: odczytuje polecenia, rozwija skrócone zapisy, obsługuje przekierowania i uruchamia programy. Samo otwarcie okna terminala nie oznacza więc, że korzystasz z csh — może w nim działać Bash, Zsh albo inna powłoka.
C shell powstał na Uniwersytecie Kalifornijskim w Berkeley, a jego głównym twórcą jest Bill Joy. Nazwa odnosi się do podobieństwa części konstrukcji sterujących do języka C, nie do możliwości wykonywania kodu C. Pliku źródłowego w C nie uruchomisz przez csh jak zwykłego skryptu.
Za pomocą csh możesz przechodzić między katalogami, uruchamiać narzędzia, łączyć je potokami i kierować wyniki do plików. Powłoka obsługuje też historię poleceń, aliasy, czyli własne skróty poleceń, oraz zarządzanie zadaniami działającymi w tle.
Wiele prostych poleceń wygląda tak samo w różnych powłokach. Przykładowo ls uruchamia program wyświetlający zawartość katalogu. Różnice stają się istotne przy zmiennych, warunkach, pętlach i przekierowaniu komunikatów błędów.
Jak wygląda składnia csh?
W csh zwykłą zmienną ustawisz poleceniem set, a zmienną środowiskową — poleceniem setenv. Zmienna środowiskowa jest przekazywana uruchamianym programom, dzięki czemu może wpływać na ich zachowanie.
set nazwa = "Anna"
echo "Witaj, $nazwa"
setenv APP_MODE test
Pierwsza zmienna służy tutaj do zbudowania komunikatu. Druga udostępnia uruchamianym programom wartość APP_MODE=test; jej znaczenie zależy od tego, czy dany program ją odczytuje.
Przykładowa pętla csh wygląda następująco:
foreach kolor (czerwony zielony niebieski)
echo "Kolor: $kolor"
end
Ta pętla wypisze trzy wiersze. Nie zadziała bez zmian w Bash, ponieważ Bash używa innej konstrukcji pętli. Podobnie instrukcja znaleziona w poradniku dla Bash, na przykład export APP_MODE=test, nie jest właściwym sposobem ustawienia zmiennej środowiskowej w csh.
Nie przenoś całych fragmentów skryptów między powłokami bez sprawdzenia składni. Zgodność pojedynczego polecenia, takiego jak echo, nie oznacza zgodności całego skryptu.
Jak sprawdzić, czy masz csh w systemie?
W systemie uniksowym możesz sprawdzić, czy program jest dostępny przez bieżącą ścieżkę wyszukiwania poleceń:
which csh
Jeżeli otrzymasz ścieżkę, na przykład /bin/csh, system potrafi odnaleźć polecenie pod tą nazwą. Brak wyniku nie zawsze dowodzi braku instalacji: program może znajdować się poza katalogami przeszukiwanymi przez powłokę. Dostępność narzędzia which i forma komunikatu także zależą od systemu.
Polecenie echo $SHELL zwykle pokazuje ścieżkę powłoki logowania, czyli domyślnej powłoki przypisanej użytkownikowi. Nie jest wiarygodnym testem aktualnie działającej powłoki, ponieważ po ręcznym uruchomieniu innej wartość tej zmiennej może pozostać bez zmian.
Jeśli csh jest dostępny, wpisanie csh uruchomi dodatkową sesję powłoki. Poleceniem exit wrócisz do poprzedniej. To prostszy sposób na próbę niż zmienianie domyślnej powłoki konta; instrukcję instalacji najlepiej sprawdzić w dokumentacji konkretnego systemu.
Csh, tcsh, Bash i sh — co wybrać?
tcsh jest rozwinięciem csh, zgodnym z nim w dużym zakresie i oferującym rozbudowane funkcje pracy interaktywnej, między innymi edycję wiersza poleceń oraz uzupełnianie nazw. W niektórych systemach polecenie csh uruchamia właśnie tcsh. Dlatego przy diagnozowaniu problemów liczy się rzeczywista implementacja, nie tylko nazwa polecenia.
| Powłoka | Kiedy ma sens |
|---|---|
| csh | Utrzymanie skryptów i środowisk wymagających składni C shell. |
| tcsh | Praca interaktywna w środowisku opartym na rodzinie csh. |
| Bash | Nowe skrypty, gdy Bash jest dostępny na docelowych maszynach. |
| sh | Przenośne skrypty korzystające ze składni zgodnej ze standardem POSIX. |
POSIX to rodzina standardów opisujących wspólne interfejsy systemów uniksowych, w tym zachowanie powłoki. Csh nie jest zgodny ze składnią powłoki POSIX. Rekomendacja użycia Bash lub sh do nowych skryptów wynika przede wszystkim z przenośności i łatwiejszego wykorzystania typowych narzędzi oraz przykładów administracyjnych, a nie z tego, że csh nie potrafi automatyzować zadań.
Jak uruchomić plik przeznaczony dla csh?
Plik z rozszerzeniem .csh zwykle zawiera skrypt C shell, lecz samo rozszerzenie nie rozstrzyga o jego zawartości. Wskazówką jest pierwsza linia, na przykład #!/bin/csh. To shebang: zapis wskazujący interpreter używany przy bezpośrednim uruchamianiu pliku wykonywalnego.
Po przejrzeniu zawartości zaufanego pliku możesz uruchomić go jawnie:
csh skrypt.csh
Taki sposób nie wymaga nadania plikowi prawa wykonywania, ale wymaga prawa odczytu. Skrypt działa z uprawnieniami uruchamiającego użytkownika, więc nie testuj nieznanego pliku przez sudo.
Jeżeli instrukcja projektu wymaga csh, najpierw sprawdź jego dostępność i wymagania projektu. Nie zastępuj go automatycznie poleceniem bash skrypt.csh — zmiana interpretera nie tłumaczy składni skryptu.
Zobacz też: Co się dzieje po wygaśnięciu domeny?
