GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ich tcsh nach all den Jahren immer noch liebe

Ich betrachte mich als glücklichen Bash-Benutzer. Als ich jedoch anfing, Unix zu erkunden, befand es sich auf einem proprietären Unix-System, das standardmäßig tcsh bereitstellte, sodass meine ersten Shell-Erfahrungen auf einer modernen Version der C-Shell (csh) lagen. Das stellte sich als glücklicher Zufall heraus, denn tcsh war auch die Shell der Wahl in dem Filmstudio, in dem ich später in meiner Karriere arbeitete.

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Bis heute verbinde ich mehrere Aufgaben mit tcsh, auch wenn es da keinen logischen Zusammenhang gibt. Ich verwende tcsh immer noch auf mindestens einem System, und sei es nur, um in der Praxis zu bleiben. Ich lasse es auch auf allen meinen Systemen installiert, um die Kompatibilität mit meinen eigenen tcsh-Skripten aufrechtzuerhalten und sicherzustellen, dass ich es starten kann, wenn ich ein Skript schreiben muss, das ich lieber in tcsh haben möchte.

Der Unterschied zwischen C-Shell und Bash

Tcsh ist die moderne Fortsetzung von csh. Als die C-Shell 1978 veröffentlicht wurde, waren die Benutzer von ihrer C-ähnlichen Syntax begeistert. C war zu dieser Zeit eine neue Programmiersprache, und was noch wichtiger ist, es war das, in dem Unix geschrieben wurde, sodass die meisten Unix-Benutzer sich mit C wohler fühlten als mit einer beliebigen Skriptsprache. In Bash beispielsweise dieser if Schleife macht einen "geheimen" Aufruf an test binär, um die bedingte Anweisung (den Teil in Klammern) auszuwerten:

v=1

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

Hier ist die gleiche Anweisung in csh oder tcsh, ohne einen externen Aufruf von test weil die bedingte Anweisung (der Code in Klammern) die eingebaute Auswertung von csh verwendet:

set v=1

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

Dies zeigt ein paar Dinge, sowohl gute als auch schlechte. Zum Beispiel ist es für einen C-Programmierer selbstverständlich, eine Bedingung in Klammern einzugeben, und aus der Perspektive eines Programmierers ist es wünschenswert, eine mathematische Auswertung in die ausführbare Datei eingebaut zu haben. Andererseits ist der if Schleifensyntax hat mehr mit Lua gemeinsam als mit C, das geschweifte Klammern als Trennzeichen verwendet:

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

In gewisser Weise fasst dies csh gut zusammen:Es ist sauber, effizient und einigen vertraut, aber skurril und inkonsistent.

Warum also verwenden?

Tcsh für Genauigkeit

Ich schreibe mehr C++- und Java- als C-Code, daher hat mein Interesse an tcsh wenig mit seinem historischen Anspruch auf Ruhm zu tun. Ich genieße jedoch Lua, und in gewisser Weise denke ich an tcsh und andere Shells, wie ich an Lua und Python oder sogar Markdown und Docbook denke. Beide Shells haben ihren Wert, und es ist leicht, auf die beliebtere zu verweisen, aber die andere ist strikt klar. Tatsächlich habe ich das Gefühl, dass tcsh eine Präzision hat, die vielen anderen Shells fehlt.

Variablen

Sie haben in Shells nicht den Luxus typisierter Variablen, aber mit tcsh können Sie sie zumindest mit einem Schlüsselwort deklarieren. Seltsamerweise gibt es mehrere Schlüsselwörter, die Sie für die Aufgabe verwenden können, aber das, auf das ich mich festgelegt habe, war set :

> set var=foo
> echo $var
foo

Sie können Variablen erweitern, indem Sie den Namen der Variablen eingeben (var in diesem Beispiel) und dann Strg+X drücken gefolgt von $ (Dollar) Taste. Das obige Beispiel setzt var zu foo .

Wie bei vielen anderen Shells können Sie alle gesetzten Variablen mit set auflisten alleine ohne Argumente:

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

Sie können eine Variable mit unset zurücksetzen Befehl:

> unset var
> set | grep var
>

Fehlende Funktionen sind eine Funktion

Vielleicht haben Sie Zeilen wie diese in einem Skript gesehen:

var=GitLab
${var,,}

Die zweite Zeile ist eine eingebaute Funktion, um den Inhalt von var umzuwandeln in Kleinbuchstaben.

Während zusätzliche Funktionen wie diese unendlich nützlich sind, habe ich manchmal das Gefühl, dass sie zur Verschleierung einladen. Shell-Scripting ist wie das HTML der Programmierung; Es ist eine der wenigen ernsthaften Sprachen, die Sie sich selbst beibringen können, indem Sie einfach den Code anderer Leute lesen. Das ist nicht unbedingt ein guter Grund, nützliche Funktionen aufzugeben, aber es ist der Grund, warum ich versuche, einige der kryptischen Abkürzungen zu vermeiden, die in verschiedenen Sprachen beliebt sind. Beim Schreiben in tcsh habe ich nicht die Möglichkeit, so viele Abkürzungen zu verwenden, daher müssen komplexe Zeichenfolgenoperationen mit einfachen Unix-Tools und nicht mit integrierten Abkürzungen durchgeführt werden. Ich glaube, dass es zu Code führt, der leichter zu lesen ist, und das macht einen großen Unterschied für zukünftige Mitwirkende – und für zukünftiges, vergessliches ich .

Integrierte Mathematik

Eines der Dinge, die ich an tcsh liebe, ist das eingebaute @ mathematische Abkürzung. Wie die meisten autodidaktischen Unix-Benutzer bin ich über bc gestolpert und habe es seitdem bereut. Ohne eigenes Verschulden wird bc den Benutzern oft als Befehlszeilenrechner beigebracht, obwohl es eigentlich besser als Sprache für Berechnungen geeignet ist . Problemumgehungen umfassen einen erstaunlichen 300-Zeilen-Rechner in reiner Bash oder das let Befehl in Bash oder das @ Befehl in tcsh.

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

Für sehr komplexe Mathematik kann es sich lohnen, bc oder eine gute Python-Mathematikbibliothek zu lernen.

Alles Wesentliche

Für mich schafft tcsh eine perfekte Balance zwischen schlichter Einfachheit und wesentlichen Funktionen. Es ist keine Shell für alle Benutzer oder sogar für alle Zwecke, aber wenn Sie Ihre Sicht auf Ihre textbasierte Welt vereinfachen möchten, könnte tcsh eine interessante Alternative darstellen.


Linux
  1. Warum ich mich in Antergos Linux verliebt habe

  2. Dd Vs Cat – Ist Dd heutzutage noch relevant?

  3. Warum eine lange Verzögerung, nachdem der Befehl nicht gefunden wurde?

  4. Warum stoppt Systemd den Dienst sofort nach dem Start?

  5. Warum wird nach dem Beenden ein Ping ausgegeben?

Warum ich KDE für meinen Linux-Desktop liebe

Warum ich bspwm so gerne für meinen Linux-Fenstermanager verwende

5 Gründe, warum ich es liebe, unter Linux zu programmieren

Warum Vim-Fans den Linux-Fenstermanager Herbstluftwm lieben

Happy Birthday, GNU:Warum ich GNU 35 Jahre später immer noch liebe

Warum ich Alpine immer noch für E-Mail am Linux-Terminal liebe