3    C SHELL

.

3.1    Vyvolání Cshellu

csh [ -cefinstvVxX ] [argumenty...]
<<vzad obsah vpřed>>

3.2    Volby C shellu

Volba Význam
-c následující argument je jméno souboru s scénářem a další argumenty předává scénáři jako parametry v poli argv
-e ukončí shell, pokud některý z interpretovaných příkazů končí abnormálně či s nenulovým návratovým kódem
-f "rychlý" start, nečte soubory .cshrc a .login
-i interaktivní shell, i když primární vstup není z terminálu
-n pouze kontrola syntaxe příkazů bez jejich provádění
-s vstup příkazů ze standardního vstupu
-t čte a interpretuje jeden řádek, který může pokračovat na fyzických řádcích, zamaskovaných znakem \
-v "hlasitá" interpretace (nastaví proměnnou verbose), zobrazuje vstupy příkazů po náhradě historie a před jejich vykonáním
-V nastaví proměnnou verbose před interpretací .cshrc
-x nastaví proměnnou echo, tisk každého příkazu a jeho argumentů před vykonáním
-X nastaví proměnnou echo před interpretací .cshrc
<<vzad obsah vpřed>>

3.3    Expanzní znaky v jménech souborů

.

Např. všechny soubory z podadresářů Mail, tmp a /bin našeho domovského adresáře zkopírujeme do podadresáře kopie:

  % cp ~/{Mail, tmp, bin}/* ~/kopie
<<vzad obsah vpřed>>

3.4    Přesměrování vstupu/výstupu

Př.

Standardní i chybový výstup při překladu prog1.c se přesměruje do souboru chyby:

 % cc prog1.c >& chyby

a standardní i chybový výstup z překladu prog2.c se k němu připojí příkazem

  % cc prog2.c >>& chyby

.

Vytvoříme např. seznam uživatelů, přihlášených do systému a nastavíme ochranu proti přepisu:

% who > seznam
% set noclober .

Budeme-li po čase na konec tohoto souboru přidat aktuální přihlášené uživatele, pak nám to C shell nedovolí:

% who >> seznam
seznam: File exist

a musíme použít zápisu

 % who >>! seznam
<<vzad obsah vpřed>>

3.5    Příkazový řádek

Př.

stránkování chybového výstupu z překladu

  % cc prog.c |& more

3.6    Prostředky pro řízení prací

Stav prací pozadí se zjistí příkazem jobs, který oznámí:

Stav práce může být:

Ukončí-li se práce na pozadí, oznámí to C shell uživateli při nejbližším zobrazení systémové výzvy ( aby nerušil aktuální práci v popředí).

Příkazy pro manipulaci s prací (jobem) v pozadí mají jako argument identifikaci práce, začínající znakem %. Pokud se argument neuvede, předpokládá se aktuální práce - tj. poslední pozastavená nebo na pozadí převedená práce.

Identifikovat práce %[práce], kde práce může být zadána takto:

Př.

Běží-li v pozadí příkazy
%sort sez1 > vys1
%sort sez2 > vys2,

pak můžeme pozastavit prvé třídění příkazem

%kill sort sez1

Příkazy pro manipulaci s prací:

bg [%práce]
převede práci do pozadí
fg [%práce]
převede práci do popředí
kill [-sig] {[pi...]|[%práce...]}
Zašle specifikovaný> signál specifikované práci. Nezadá-li se volba sig, pak pošle signál TERM (ukončení práce) procesu specifikovanému pid nebo zadané práci. Volbu -sig lze zadat číselně nebo jménem signálu. Jména signálů, která lze použít se zjistí příkazem kill -l.
limit [-h] [[prostředek [maximální_hodnota]]
omezí systémový prostředek aktuálního procesu a všech jeho potomků na maximální hodnotu. Příkaz bez argumentů vypíše aktuální omezení pro všechny prostředky, zadá-li se příkaz limit prostředek, vypíše se aktuální omezení daného prostředku. Volba -h je přístupná pouze superuživateli a nastavuje tvrdá omezení na systémové prostředky, které běžný uživatel nemůže překročit. Omezit lze např.tyto prostředky:
unlimit [-h] [prostředek]
zruší omezení prostředku. , viz příkaz limit . Volba -h, přístupná pouze superuživateli, zruší Tvrdá omezení. Nezadá-li se prostředek, pak se ruší omezení na všechny prostředky
notify [%práce]
oznámí stav práce. Chceme-li zprávu o jakékoliv změně všech prací, nastavíme vnitřní proměnnou příkazem set notify.
stop [%práce]
pozastaví práci běžící v pozadí
<<vzad obsah vpřed>>

3.7    Historie příkazů C shellu

Př.

Pomocí volby -h můžeme např. "automaticky" generovat scénáře - tak budeme-li opakovat určitou posloupnost pěti příkazů, pak po jejich prvém průběhu je uložíme do soboru akce5:

% history -h 5 > akce5

a v dalším je můžeme již pouze interpretovat

   % csh akce5.

Pokud chceme znovu vykonat některý ze zapamatovaných příkazů, vyvoláme jej pomocí znaku !, následovaného identifikací řádku:

Povel Význam
!! poslední řádek
!n řádek s číslem n
!-n n-tý řádek před řádkem aktuálním
!řetězec poslední řádek začínající řetězcem
!?řetězec poslední řádek končící řetězcem
!?řetězec? poslední řádek obsahující řetězec obklopený libovolnými znaky

Při konstrukci nového příkazového řádku lze použít slov z minulých příkazů. Slova se uvozují dvojtečkou, za kterým následuje označení slova:

Označení Význam
# celá příkazová řádka
0 prvé slovo příkazové řádky (název příkazu)
n n-té slovo příkazové řádky, speciální znaky C shellu se považují rovněž za slova (& | > < atd.)
$ poslední slovo příkazové řádky
% poslední nalezené slovo při hledání příkazem ? (viz dále)
a-b rozmezí slov a až b (např. 4-6)
* prvé až poslední slovo příkazové řádky (bez nultého, tedy bez názvu příkazu)
a* zkratka pro a-$
a- slova od a do předposledního slova řádky

Nový příkazový řádek, vytvořený tímto způsobem můžeme ještě modifikovat příkazy, kterým předchází dvojtečka a které jsou analogické příkazům editoru ed:

Příkaz Význam
h odstraní z úplné cesty jméno souboru
r odstraní ze jména souboru příponu (poslední tečku a řetězec za ní následující)
s/řetězec/náhrada nahradí řetězec náhradou
t ponechá z úplné cesty je jméno souboru
& opakuje poslední náhradu
g použije-li se jako předpona předcházejících povelů, platí tyto globálně ve všech slovech
P vytiskne novou příkazovou řádku bez vykonání
^řetězec^náhrada zkrácený zápis s/řetězec/náhrada

V povelech náhrady nelze používat regulární výrazy, pokud chceme nahrazovat v řetězci /, je třeba je zamaskovat jako \/, stejně tak & v náhradě musíme psát \&.

<<vzad obsah vpřed>>

3.8    Alias pro příkazy a jejich skupiny

Příjemným rysem C shellu je mechanismus tvorby, zobrazování, modifikace a rušení přezdívek -alias jmen pro příkazy a jejich skupiny. Příkazem

alias [název [definice]],

který přiřadí přezdívku název příkazové řádce, obsahující definici. Příkaz bez argumentů vypíše všechny přezdívky a jejich definice, zadá-li se pouze název, vypíše se definice přezdívky. V definici lze použít i odkazů na předcházející příkazy.

Př.

Pro výpis archivu ve formátu tar z diskety se vyplatí zkrátit povel
tar tvf /dev/fd113ds15 na vypis:

  % alias vypis tar tvf /dev/fd113ds15

Výpis adresáře s podrobnými informacemi o souborech pomocí ls -la po stránkách na obrazovku přezveme na dir příkazem

% alias dir 'ls -la \!* | more'.

Zde jsou apostrofy použity pro zamaskování speciálních znaků (*,|) a \maskuje ! , aby nedošlo k náhradě předešlého příkazu již při psaní alias. Připomínáme, že !* jsou argumenty z příkazové řádky aktuálního příkazu.

Příkazy alias lze do sebe vnořovat, např. potřebujeme- li vytvořit přezdívku dirs pro příkazy, které výpis pomocí dir ještě zapíší do souboru sseznam, můžeme to zapsat

  % alias dirs 'dir | tee sseznam'.

Použijeme-li název v definici téhož příkazu alias, pak při jeho provedení dojde k chybě. Platnost přezdívky se zruší příkazem unalias název. Např. všechny přiřazené přezdívky se zruší příkazem

  % unalias *

Přezdívky, přiřazené pomocí příkazu alias platí pouze pro aktuální shell; chceme-li používat trvale některé z nich, zapíšeme je do souboru .cshrc nebo .login.

<<vzad obsah vpřed>>