Unixové shelly - neologismův názor

11.08.2003 19:45

Operační systém unix byl navržen v několika vrstvách, kde každá vrstva obklopuje vrstvu pod ní. Nejsvrchnější vrstvou pak je takzvaný shell (jak vidno i název byl zvolen dle této filosofie). Shell jakožto příkazově orientované rozhraní operačního systému je implementován jako normální program. Toto má za následek, že shellů se během dlouhé unixové historie objevilo poměrně hodně. Některé z nich bych si dovolil okomentovat. (je léto - okurková sezóna - flamewars jsou vítány

V následujících komentářích budu komentovat výhradně (s jednou malou vyjímkou)pouze shelly při interaktivním provozu, skriptování se věnovat nebudu a to z tohoto důvodu. Považuji totiž psaní skriptů v něčem jiném než v klasickém Bourne shellu (nenapadá mne lepší název, ale mám na mysli to co je popsáno v POSIXu) za zločin, který by se měl trestat minimálně kastrací. (stejně jako psaní komentářu v programu jinak než anglicky apod.) Shellové skripty jsou určeny na jednoduché věci, na které Bourne shell plně stačí a je to stanovený standard, který vám bude fungovat všude. Osobně mám proti sh spoustu námitek, ale chápu potřebu standardizace. Ostatně pokud někdo píše něco \"složitějšího\" v shellu je buď debil nebo vůl. Shellový skripting má své docela přesně vymezené pole působnosti a na vše ostatní jsou zde jiné standardní nástroje (awk, perl aco já vím co ještě). Dále bych chtěl upozornit na to, že hodlám komentovat jen NĚKTERÉ shelly, takže námitky typu \"...ale xyz-shell je lepší...\" jsou bezpředmětné.

Bourne Again Shell (BASH)
Tento shell považuju (z mnou komentovaných) za bezkonkurenčně nejhorší. Má sice několik positivních vlastností jako dobře fungující vi mód nebo bezproblémovost ve většině prostředí (je to VELMI rozířený shell), ale jinak bych tento shell popsal jako obrovské hovado, které nic neumí. Neumí věci jako je automaticke opravování napsaného příkazu a celá interakce s uživatelem je docela pofidérní (jako ostatně u většiny GNU softwaru). Vážně nechápu co je v té půlmegové binárce schované (kromě zbytečně přebujelého skriptování). Pokud vám bash vyhovuje ve věcech jako je kompletování slov, historii pak doporučuji přejít na tcsh, ušetříte paměť, nervy a objevíte i nějakou tu feature navíc. Navíc - doopravdy chcete používat něco TAK MOC rozšířeneho?

TCSH (Toronto C Shell?)
Tento shell je rozšířením klasického C shellu z BSD. Vlastnostmi je zhruba srovnatelný s bashem, navíc má ovšem automatickou opravu příkazového řádku (dost návyková feature). Mně osobně docela vyhovuje, přístup mi přijde takový nějaký pochopitelnější a přístupnější než u bashe. Dokonce se mi i zdá, že toho snad i umí víc (ovšem to může a asi i bude neskutečně špatnou dokumentací u bashe). Další věc, která se mi poměrně líbí je skriptování. Jsem si vědom toho co jsem napsal o skriptování výše a také jsem si vědom toho co se o skriptování v C shellu říká, ale nemůžu si pomoct. Prostě mi to příjde fajn mít to všechno v C-like syntaxi a někdy pro čistě osobní potřebu (a když se nikdo nedívá) v tom i něco splodím. Další výhodou je to, že je to docela malý shell (viz. tabulka na konci). Ze záporů bych jmenoval jistou problémovost v defaultní instalaci(veci jako backspace vs. delete, barevné ls apod.) - ovšem nic co by se nedalo řešit. Další docela sucking feature je vi mód, který je docela dost špatný. Horší je to, že tento shell je vlastně mrtvý - moc se nevyvíjí. Ovšem mně připadá jako VELMI dobrá volba (rozhodně pro začátečníky, popř. řekněme \"not-so-advanced usage\"). Mimochodem - je to standardní shell FreeBSD.

Zsh
Nejlepší shell na který jsem zatím narazil - kombinuje vše to co se mi líbí na C-shellu s docela pokročilýmy (ty i/y odhaduju a tohle je asi tak nejmíň blbě vypadající kombinace) funkcemi. Automatické doplňování v podání zsh je doopravdy něco. Myslím, že tento shell by se dal popsat jako rozšířený tcsh, kde jsou opravené chyby. To vše při ještě slušné velikosti. Nevím, co o tomto shellu napsat, protože je to doopravdy skvost. Musím ale dodat, že já osobně se na tento shell už asi půl roku snažím přejít ale pořád zůstávám u tcsh. Nevím proč, ale nějak mi stačí... snad zítra.

tabulka:
variola ~% uname -a
Linux variola 2.4.2 FreeBSD 4.6-RELEASE #40: Sat Jul 19 12:48:20 GMT 2003
root@v i386 unknown
variola ~% ls -l /bin/*sh*
-rwxr-xr-x 1 root root 519964 Jul 9 2001 /bin/bash
-rwxr-xr-x 1 root root 288604 Jun 25 2001 /bin/tcsh
-rwxr-xr-x 2 root root 404604 Jul 30 2001 /bin/zsh

Závěrem bych napsal, že samozřejmě vím, že hádky o tom, který shell je nejlepší nikam nevedou a jsou naprosto zbytečné, ale je léto, tak flames go on. (i když to o bashi myslím smrtelně vážně). Doufám, že v diskusi pod článkem se kvalitně pohádáme a (případně) všichni budeme obohaceni o nové zkušenosti/znalosti/zážitky.

neologism

P.S. tento článeček jsem napsal v úmorném vedru a z čirého zoufalství nad vlastním nicneděláním. Jsem si vědom jistých řeknemě \"nedokonalostí\" a prosím o shovívavost...neologism