GNU/Linux >> Linux Esercitazione >  >> Linux

Perché amo ancora tcsh dopo tutti questi anni

Mi considero un felice utente Bash. Tuttavia, quando ho iniziato a esplorare Unix, era su un sistema Unix proprietario che forniva tcsh per impostazione predefinita, quindi le mie prime esperienze con la shell erano su una versione moderna della shell C (csh). Si è rivelato un fortunato incidente perché tcsh era anche il guscio preferito dello studio cinematografico dove ho lavorato più avanti nella mia carriera.

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Ad oggi, ci sono diversi compiti che associo a tcsh, anche se non c'è una correlazione logica lì. Uso ancora tcsh su almeno un sistema, se non altro per rimanere in pratica. Lo tengo anche installato su tutti i miei sistemi per mantenere la compatibilità con i miei script tcsh e per assicurarmi di poterlo avviare quando devo scrivere uno script che preferisco avere in tcsh.

La differenza tra C shell e Bash

Tcsh è la continuazione moderna di csh. Quando la shell C è stata rilasciata nel lontano 1978, gli utenti erano entusiasti della sua sintassi simile al C. Il C all'epoca era un nuovo linguaggio di programmazione e, cosa più importante, era ciò in cui era stato scritto Unix, quindi la maggior parte degli utenti Unix si sentiva più a suo agio con il C che con un linguaggio di scripting arbitrario. Ad esempio, in Bash, questo if loop effettua una chiamata "segreta" al test binario per valutare l'istruzione condizionale (la parte tra parentesi):

v=1

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

Ecco la stessa istruzione in csh o tcsh, senza una chiamata esterna a test perché l'istruzione condizionale (il codice tra parentesi) utilizza la valutazione incorporata di csh:

set v=1

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

Questo dimostra alcune cose, sia buone che cattive. Ad esempio, è naturale per un programmatore C digitare un condizionale tra parentesi ed è desiderabile dal punto di vista di un programmatore avere una valutazione matematica integrata nell'eseguibile. D'altra parte, il if la sintassi del ciclo ha più cose in comune con Lua rispetto a C, che usa le parentesi graffe come delimitatori:

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

In un certo senso, questo riassume bene csh:è pulito, efficiente e familiare per alcuni, ma bizzarro e incoerente.

Allora perché usarlo?

Tcsh per precisione

Scrivo più codice C++ e Java che C, quindi il mio interesse per tcsh condivide poco con la sua storica pretesa di fama. Tuttavia, mi piace Lua e, in un certo senso, penso a tcsh e ad altre shell come penso a Lua e Python o persino a Markdown e Docbook. Entrambe le conchiglie hanno dei meriti ed è facile indicare quella più popolare, ma c'è molta chiarezza sull'altra. In effetti, ritengo che tcsh abbia una precisione che manca a molte altre shell.

Variabili

Non hai il lusso delle variabili digitate nelle shell, ma con tcsh puoi almeno dichiararle con una parola chiave. Stranamente, ci sono diverse parole chiave che puoi utilizzare per l'attività, ma quella su cui ho deciso era set :

> set var=foo
> echo $var
foo

Puoi espandere le variabili digitando il nome della variabile (var in questo esempio) e quindi premendo Ctrl+X seguito da $ chiave (dollaro). L'esempio sopra imposta var a foo .

Come con molte altre shell, puoi elencare tutte le variabili impostate usando set da solo senza argomenti:

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

Puoi annullare l'impostazione di una variabile utilizzando unset comando:

> unset var
> set | grep var
>

Le funzioni mancanti sono una caratteristica

Forse hai visto righe come questa in uno script:

var=GitLab
${var,,}

La seconda riga è una funzione incorporata per trasformare il contenuto di var in minuscolo.

Sebbene funzioni extra come queste siano infinitamente utili, a volte sento che sono un invito all'offuscamento. Lo scripting della shell è come l'HTML della programmazione; è uno dei pochi linguaggi seri che puoi insegnare a te stesso semplicemente leggendo il codice di altre persone. Questo non è necessariamente un ottimo motivo per rinunciare a funzioni utili, ma è il motivo per cui cerco di evitare alcune delle criptiche abbreviazioni popolari in varie lingue. Quando scrivo in tcsh, non ho la possibilità di usare la stessa abbreviazione, quindi le operazioni complesse sulle stringhe devono essere eseguite con strumenti Unix di base piuttosto che con scorciatoie integrate. Credo che si traduca in un codice più facile da leggere e questo fa una grande differenza per i futuri contributori e per il futuro, smemorato me .

Matematica integrata

Una delle cose che amo di tcsh è il suo @ integrato scorciatoia matematica. Come la maggior parte degli utenti autodidatti di Unix, mi sono imbattuto in bc e da allora me ne sono pentito. Non per colpa sua, bc viene spesso insegnato agli utenti come calcolatore da riga di comando quando in realtà è più adatto come linguaggio di calcolo . Le soluzioni alternative includono un'incredibile calcolatrice a 300 righe in puro Bash o let comando in Bash o il @ comando in tcsh.

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

Per una matematica molto complessa, potrebbe valere la pena imparare bc o una buona libreria matematica Python.

Tutto l'essenziale

Per me, tcsh trova un perfetto equilibrio tra la semplicità assoluta e le caratteristiche essenziali. Non è una shell per tutti gli utenti, o anche per tutti gli scopi, ma se stai cercando di semplificare la tua visione del tuo mondo basato su testo, tcsh potrebbe fornire un'interessante alternativa.


Linux
  1. Perché i programmatori adorano il packaging di Linux

  2. 5 motivi per cui amo programmare su Linux

  3. Buon compleanno, GNU:Perché amo ancora GNU 35 anni dopo

  4. Dd Vs Cat - Dd è ancora rilevante in questi giorni?

  5. Perché il processo figlio è ancora vivo dopo che il processo genitore è stato ucciso in Linux?

Perché amo KDE per il mio desktop Linux

Perché mi piace usare bspwm per il mio window manager Linux

Perché i fan di Vim adorano il window manager Herbstluftwm Linux

Perché amo ancora Alpine per la posta elettronica sul terminale Linux

Perché yum updateinfo non mostra tutti gli aggiornamenti?

I parametri Diffie Hellman continuano a essere calcolati dopo 24 ore