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

Was sind die grundlegenden Unterschiede zwischen den Mainstream-*nix-Shells??

Geschlossen . Diese Frage muss stärker fokussiert werden. Antworten werden derzeit nicht akzeptiert.

Möchten Sie diese Frage verbessern? Aktualisieren Sie die Frage so, dass sie sich nur auf ein Problem konzentriert, indem Sie diesen Beitrag bearbeiten.

Vor 6 Jahren geschlossen.


Verbessern Sie diese Frage

Was sind die grundlegenden Unterschiede zwischen den gängigen *NIX-Shells und welche Szenarien könnten Sie dazu veranlassen, eine über der anderen zu verwenden? Ich verstehe, dass ein Teil davon wahrscheinlich auf Benutzerpräferenzen zurückzuführen ist, aber ich habe bisher nur Bash verwendet und bin interessiert zu hören, wo eine andere Shell nützlich sein könnte.

Gibt es auch Auswirkungen auf vom Benutzer geschriebene Shell-Skripte, wenn sie unter der einen oder anderen Shell ausgeführt werden, oder geht es einfach darum, die Shell am Anfang der Datei zu ändern? Mein Instinkt sagt, dass es nicht so einfach ist.

Akzeptierte Antwort:

Für die interaktive Verwendung gibt es zwei Hauptkonkurrenten, Bash und zsh, plus den Nachzügler tcsh und den Newcomer fish.

  • Bash ist die offizielle Shell des GNU-Projekts und die Standard-Shell auf den meisten Linux-Distributionen. Bei anderen Unices, die nicht mit einer anständigen interaktiven Shell als Teil der Basisinstallation ausgeliefert werden, ist Bash meiner Meinung nach das, was die Leute wählen, in einer sich selbst verstärkenden „Bash ist überall, also werde ich es auch verwenden“-Schleife. Siehe auch Warum ist Bash überall? (mit vielen historischen Informationen).

  • Zsh hat fast alle Funktionen von Bash und viele weitere (nützliche!) Funktionen. Sein Hauptnachteil ist, dass es weniger bekannt ist, was praktisch bedeutet, dass Sie es weniger wahrscheinlich bereits auf einem System finden, das jemand anderes eingerichtet hat, und es gibt weniger Dokumentation von Drittanbietern darüber. Siehe auch Welche zsh-Funktionen verwenden Sie?, Welche Funktionen sind in zsh und fehlen in Bash oder umgekehrt?, Was sind die praktischen Unterschiede zwischen Bash und Zsh?.

  • Tcsh war einst (bis Anfang der 1990er) die Shell mit den besten interaktiven Eigenschaften, wie ihr Vorgänger csh. Das machte es beliebt für die interaktive Verwendung (aber nicht für das Skripting). Zsh hat tcsh eingeholt und sich ziemlich schnell weiter verbessert, und Bash hat (mit programmierbarer Vervollständigung) in den frühen 2000er Jahren aufgeholt, während tcsh in den letzten 15 Jahren kaum Fortschritte gemacht hat. Daher gibt es wenig Grund, jetzt tcsh zu lernen.

  • Fish versucht, sauberer zu sein als seine Vorgänger. Es hat einige nette Funktionen (einfachere Syntax, Syntaxfärbung auf der Befehlszeile), aber andere fehlen (was auch immer der Autor nicht mag). Die Fischgemeinschaft ist viel kleiner als die von zsh, was die Auswirkungen noch akuter macht.

Für die Skripterstellung gibt es mehrere Sprachen, auf die Sie abzielen möchten, je nachdem, wie portabel Ihre Skripts sein sollen.

  • Alles, was vorgibt, Unix-ähnlich zu sein, hat eine von Bourne abgeleitete Shell als /bin/sh . Es gibt immer noch einige kommerzielle Unices, in denen /bin/sh ist nicht POSIX-kompatibel.

  • Fast jedes jetzt laufende Unix hat einen sh ausführbare Datei, die mindestens mit mindestens POSIX.2-1992 und normalerweise mindestens POSIX:2001 alias Single Unix v3 kompatibel ist. Diese Shell befindet sich möglicherweise in einem anderen Verzeichnis wie /usr/bin/posix oder /usr/xpg6/bin . POSIX-Emulationsschichten existieren auch für fast jedes System, das leistungsfähig genug ist, um es zu unterstützen, was es zu einem attraktiven Ziel macht.

  • Viele Unix-Systeme haben ksh93, das einige sehr nützliche Funktionen bringt, die POSIX sh fehlen (Arrays, assoziative Arrays, erweiterte Globs (*(foo) , @(foo|bar) , …), Null-Globs (~(N)foo* ), …). Ksh war ursprünglich kommerzielle Software (es wurde im Jahr 2000 kostenlos, nachdem sich einige Gewohnheiten eingestellt hatten), und viele freie Unices (Linux, *BSD) gewöhnten sich an, nur einen viel älteren freien Klon (pdksh) bereitzustellen, dem viele dieser nützlichen Funktionen fehlten . Pdksh wird nun von mksh außerhalb von OpenBSD verdrängt, aber selbst mksh ist nicht in der Lage, alle ksh93-Features zu implementieren. Heutzutage können Sie sich nicht darauf verlassen, dass ksh93 überall verfügbar ist, insbesondere nicht unter Linux, wo Bash die Norm ist.

  • Bash ist immer unter Linux verfügbar (mit Ausnahme einiger eingebetteter Varianten) und oft auch unter anderen Unices. Es hat die meisten nützlichen Funktionen von ksh93, wenn auch manchmal mit einer anderen Syntax.

  • Zsh hat die meisten nützlichen Funktionen von ksh93 und Bash. Seine Kernsyntax ist sauberer, aber nicht mit Bourne kompatibel. Verlassen Sie sich außer bei macOS nicht darauf, dass zsh auf einem System verfügbar ist, das Sie nicht installiert haben.

  • Für fortgeschritteneres Skripting können Sie sich an Perl oder Python wenden. Diese Sprachen verfügen über geeignete Datenstrukturen, anständige Textbearbeitungsfunktionen, anständige Prozesskombinationen und Kommunikationsmechanismen sowie Tonnen verfügbarer Bibliotheken. Die meisten Unix-Systeme haben sie, entweder mit dem Betriebssystem gebündelt oder vom Administrator installiert (weil es so viele Perl- und Python-Skripte gibt, dass es ein seltenes System ist, das nicht mindestens eines von beiden hat).

Verwandte:Ergebnisse für „for in * do“-Schleifen umkehren?
Linux
  1. Was sind die Worttrennzeichen von Readline?

  2. Linux – Was sind die Hauptunterschiede zwischen Bsd- und Linux-basierten Betriebssystemen?

  3. pfSense vs Netgear Router:Was sind die Hauptunterschiede?

  4. Fedora vs. Ubuntu:Was sind die Hauptunterschiede?

  5. Was sind die Unterschiede zwischen Linux- und Windows-.txt-Dateien (Unicode-Codierung)

Cassandra vs. MongoDB – Was sind die Unterschiede?

Terraform vs. Kubernetes:Was sind die Unterschiede?

Was sind die Unterschiede zwischen cPanel und WHM?

useradd vs. adduser:Was sind die Unterschiede?

Was sind die Unterschiede zwischen rdesktop und xfreerdp?

Was sind die funktionalen Unterschiede zwischen .profile .bash_profile und .bashrc