C shell (csh) je unixový shell vyvinutý Billem Joyem pro BSD Unix.
Byl původně odvozen z šestého vydání Unixu /bin/sh (kterým byl Thompson shell), předchůdce Bourne shellu. Jeho syntaxe je silně ovlivněná programovacím jazykem C (odtud pochází název shellu). C shell přidal mnoho vylepšení oproti Bourne shell, jako například aliasy a historii příkazů.
Protože mnoho z vlastností C shellu bylo implementováno do jiných shellů, původní C shell je používán minimálně; byl nahrazen jinými (částečně kompatibilními) shelly, jako je Tenex C shell (tcsh). Nezávisle vyvinutý a zmodernizovaný C shell, vytvořený Nicolem Hamiltonem, také přežil ve Windows ve formě Hamilton C shellu.
Vlastnosti
Zástupné znaky
Zástupné znaky (žolíky) slouží k usnadnění zadávání argumentů. Jejich použití je stejné jako u shellu standardního:
*
– vyhoví libovolný řetězec, př. a* → a, ab
?
– vyhoví jeden libovolný znak, př. a? → aa, ab, ac
[abc]
– vyhoví libovolný znak z uvedených znaků, př. a[ab] → aa, ab
\
– zbavuje následující znak jeho speciálního významu
Důležité je, že soubory se jmény začínajícími tečkou nevyhovují žolíkovému zápisu *
. Je to proto, aby při použití zástupných znaků nemohly být omylem postiženy soubory .
(což je aktuální adresář) nebo ..
(nadřazený adresář) ani další soubory začínající tečkou. Pokud chceme pracovat se soubory, jejichž jméno začíná tečkou a vyhnout se uvedeným dvěma položkám pro aktuální a nadřízený adresář, je třeba použít složitější zápis; jednou z možností je .[^.]*
, který ovšem nepostihuje soubory, jejichž jména začínají dvěma tečkami.
Přesměrování vstupu a výstupu příkazu
Standardní vstup/výstup může být přesměrován do souboru symboly:
< soubor
– vstupu je přiřazen soubor
> soubor
– výstupu je přiřazen soubor
>> soubor
– výstup je přiřazen na konec souboru
>& soubor
– výstup a chybový výstup jsou přesměrovány do souboru
>>& soubor
– výstup a chybový výstup jsou připojeny na konec souboru
Výhody
Výhodou C shellu je, že umožňuje chránit soubory před nechtěným přepsáním při špatném přesměrování výstupu. Další výhodou je, že pokud máme nastavenou proměnnou noclobber
, tak nám C shell odmítne přesměrovat výstup příkazu do již existujícího souboru.
Práce na popředí a pozadí
Máme-li zadán jeden nebo více příkazů na příkazovém řádku, C shell z nich vytvoří jednotku zvanou job. Pokud je příkazový řádek ukončen znakem &
, je job spuštěn na pozadí. Job spuštěný na pozadí probíhá zároveň s jobem prováděným na popředí. Při spouštění jobu na pozadí vrací C shell číslo jobu (je zobrazeno v hranatých závorkách) a identifikační čísla procesů, z nichž je job složen.
Proměnné
Hodnotou proměnné v C shellu je řetězec. Přiřazení hodnoty proměnné se provádí příkazem set
. Samotný příkaz set
bez argumentů vypíše hodnoty všech definovaných proměnných, které C shell používá ke své práci.
Přes proměnnou argv
má autor scénáře přístup k jednotlivým argumentům – pozičním parametrům dané kopie C shellu. Proměnná cwd
je absolutní jméno aktuálního adresáře. home
obsahuje absolutní jméno domovského adresáře. V proměnné path
hledá C shell příkazové soubory. prompt
obsahuje řetězec, kterým dává C shellu výzvu k zadání příkazu. Ve status
najdeme stavový příznak vrácený posledním skončeným programem. term
označuje typ terminálu, ze kterého uživatel pracuje. user
je jméno uživatele přihlašujícího se do systému.
Historie
C shell je schopný zapamatovat si několik předcházejících příkazových řádků, které uživatel zadal, a tedy lze se k těmto příkazům vrátit nebo je upravit a použít je v pozměněné podobě. Počet příkazových řádků je dán obsahem proměnné history
(obvykle je nastaven na hodnotu 10).
Kritika
Tom Christiansen ve svém článku „Csh Programming Considered Harmful“ kritizuje některé nedomyšlenosti návrhu C shellu a chyby jeho historických implementací. Dospívá k názoru, že by se C shell neměl používat pro programování skriptů.[1]
Odkazy
Reference
- ↑ CHRISTIANSEN, Tom, 1994. Csh Programming Considered Harmful [online]. 1994 [cit. 2023-04-22]. Dostupné v archivu pořízeném dne 2023-03-23.
Externí odkazy
- Csh - The C Shell – stránka podrobně rozebírající kladné i záporné vlastnost C shellu.