GNU/Linux >> Znalost Linux >  >> Linux

Proč po všech těch letech stále miluji tcsh

Považuji se za šťastného uživatele Bash. Když jsem však začal prozkoumávat Unix, bylo to na proprietárním unixovém systému, který ve výchozím nastavení poskytoval tcsh, takže moje první zkušenosti s shellem byly na moderní verzi shellu C (csh). To se ukázalo jako šťastná náhoda, protože tcsh byl také volbou ve filmovém studiu, kde jsem později ve své kariéře pracoval.

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

K dnešnímu dni existuje několik úkolů, které spojuji s tcsh, i když tam není žádná logická korelace. Stále používám tcsh alespoň na jednom systému, i když jen proto, abych zůstal v praxi. Nechávám si jej také nainstalovaný na všech svých systémech, abych zachoval kompatibilitu s mými vlastními skripty tcsh a zajistil, že jej budu moci spustit, když potřebuji napsat skript, který preferuji v tcsh.

Rozdíl mezi C shell a Bash

Tcsh je moderním pokračováním csh. Když byl shell C vydán v roce 1978, uživatelé byli nadšeni jeho syntaxí podobnou C. C byl v té době nový programovací jazyk, a co je důležitější, byl v něm napsán Unix, takže většině uživatelů Unixu vyhovoval C více než libovolný skriptovací jazyk. Například v Bash toto if smyčka provede "tajné" volání test binární k vyhodnocení podmíněného příkazu (část v závorkách):

v=1

if [ $v -gt 0 ]
  then
  echo "verbose"
fi

Zde je stejný příkaz v csh nebo tcsh, bez externího volání test protože podmíněný příkaz (kód v závorkách) používá vestavěné vyhodnocení csh:

set v=1

if ($v > 1) then
  echo "verbose"
endif

To ukazuje několik věcí, dobrých i špatných. Pro programátora v jazyce C je například přirozené psát podmínku do závorek a z pohledu programátora je žádoucí mít matematické vyhodnocení zabudované do spustitelného souboru. Na druhé straně if smyčková syntaxe má více společného s Lua než C, které používá složené závorky jako oddělovače:

// this does not work in Csh
if ( v>1 ) {
        printf("verbose");
}

Svým způsobem to pěkně shrnuje csh:je čisté, efektivní a pro některé známé, ale svérázné a nekonzistentní.

Tak proč to používat?

Tcsh pro přesnost

Píšu více C++ a Java než C kód, takže můj zájem o tcsh má jen málo společného s jeho historickým nárokem na slávu. Nicméně mě baví Lua a svým způsobem myslím na tcsh a další shelly jako Lua a Python nebo dokonce Markdown a Docbook. Obě skořápky mají své přednosti a je snadné ukázat na jednu, která je oblíbenější, ale druhá je zcela jasná. Ve skutečnosti mám pocit, že tcsh má přesnost, kterou mnoho jiných shellů postrádá.

Proměnné

Luxus typovaných proměnných v shellech nezískáte, ale s tcsh je můžete alespoň deklarovat pomocí klíčového slova. Kupodivu existuje několik klíčových slov, která můžete pro tento úkol použít, ale to, pro které jsem se rozhodl, bylo set :

> set var=foo
> echo $var
foo

Proměnné můžete rozšířit zadáním názvu proměnné (var v tomto příkladu) a poté stiskněte Ctrl+X následuje $ (dolarový) klíč. Výše uvedený příklad nastavuje var na foo .

Stejně jako u mnoha jiných shellů můžete vypsat všechny proměnné sady pomocí set sám bez argumentů:

> set
term    xterm
tty     pts/2
uid     1000
user    seth
var     foo
[...]

Nastavení proměnné můžete zrušit pomocí unset příkaz:

> unset var
> set | grep var
>

Chybějící funkce je funkce

Možná jste ve skriptu viděli řádky jako tento:

var=GitLab
${var,,}

Druhý řádek je vestavěná funkce pro transformaci obsahu var na malá písmena.

I když jsou další funkce, jako jsou tyto, nekonečně užitečné, někdy mám pocit, že jsou výzvou k zamlžování. Shell skriptování je jako HTML programování; je to jeden z mála seriózních jazyků, které se můžete naučit sami čtením kódu jiných lidí. To není nutně skvělý důvod, proč se vzdát užitečných funkcí, ale je to důvod, proč se snažím vyhnout některým záhadným zkratkám populárním v různých jazycích. Při psaní v tcsh nemám možnost používat tolik zkratek, takže složité operace s řetězci je nutné provádět spíše pomocí základních unixových nástrojů než pomocí vestavěných zkratek. Věřím, že výsledkem je kód, který se snáze čte, a to znamená velký rozdíl pro budoucí přispěvatele – a pro budoucí zapomnětlivé .

Vestavěná matematika

Jedna z věcí, které na tcsh miluji, je jeho vestavěný @ matematická zkratka. Jako většina unixových samouků jsem narazil na bc a od té doby toho lituji. Bez vlastního zavinění se bc často učí uživatele jako kalkulačka příkazového řádku, když se to ve skutečnosti lépe hodí jako jazyk výpočtu . Mezi řešení patří úžasná 300řádková kalkulačka v čistém Bash nebo let příkaz v Bash nebo @ příkaz v tcsh.

> @ n = ( 1 + 1 / 2 )
> echo $n
1

Pro velmi složitou matematiku může být užitečné naučit se bc nebo dobrou matematickou knihovnu Python.

Vše podstatné

Pro mě tcsh vytváří dokonalou rovnováhu mezi naprostou jednoduchostí a základními funkcemi. Není to shell pro všechny uživatele nebo dokonce pro všechny účely, ale pokud si chcete zjednodušit pohled na svůj textový svět, tcsh může poskytnout zajímavou alternativu.


Linux
  1. Proč jsem si zamiloval Antergos Linux

  2. Dd vs Cat – je Dd v dnešní době stále relevantní?

  3. Proč dlouhé zpoždění poté, co příkaz nebyl nalezen?

  1. Proč dochází k výstupu příkazu Ping po jeho ukončení?

  2. Proč se stále používá číslo disku/diskového oddílu?

  3. Jak nahradit všechny středníky za 1.?

  1. Proč podřízený proces stále žije poté, co byl nadřazený proces v Linuxu zabit?

  2. Proč Centos stále nepoužívá nejnovější jádro

  3. Proč yum updateinfo nezobrazuje všechny aktualizace?