Frage

Ich bin kein Neuling in *nix, aber in letzter Zeit verbringe ich viel Zeit mit der Eingabeaufforderung.Meine Frage ist, welche Vorteile die Verwendung von KornShell (ksh) oder Bash Shell hat.Wo liegen die Gefahren bei der Verwendung eines über dem anderen?

Ich möchte aus der Perspektive eines Benutzers verstehen, anstatt nur Skripte zu erstellen.

War es hilfreich?

Lösung

Bash.

Die verschiedenen UNIX und Linux-Implementierungen haben verschiedene Source-Level-Implementierungen von KSH, von denen einige echte KSH, von denen einige sind pdksh Implementierungen und einige davon sind symbolisch verlinkt nur auf eine andere Schale, die eine „KSH“ Persönlichkeit hat. Dies kann zu seltsamen Unterschieden in Ausführungsverhalten führen.

Mindestens mit bash können Sie sicher sein, dass es eine einzige Code-Basis ist, und alles, was Sie brauchen Sorgen über das, was (in der Regel mindestens) Version von bash installiert ist. viel Scripting auf so ziemlich jedes moderne (und nicht so modern) UNIX, Programmierung bash getan zu haben, in meiner Erfahrung zuverlässiger konsistent ist.

Andere Tipps

Der Unterschied zwischen Kornshell und Bash sind minimal. Es gibt bestimmte Vorteile übereinander, aber die Unterschiede sind winzig:

  • BASH ist viel einfacher, eine Aufforderung zu setzen, die das aktuelle Verzeichnis anzeigt. Um in Kornshell das gleiche zu tun ist hackish.
  • Kornshell hat assoziative Arrays und BASH nicht. Nun, das letzte Mal habe ich Assoziative Arrays war ... Lassen Sie mich denken ... nie.
  • Kornshell Griffe Schleife Syntax ein bisschen besser. Sie können in der Regel einen Wert in einer Schleife gesetzt Kornshell und haben es nach der Schleife zur Verfügung.
  • Bash Griffe Exit-Codes immer von Rohren in einer sauberen Art und Weise.
  • Kornshell hat den print Befehl, die Art und Weise besser als der echo Befehl ist.
  • Bash hat Registerkarte Endbearbeitung. In älteren Versionen
  • Kornshell hat die r Geschichte Befehl, der mir erlaubt, schnell ältere Befehle erneut aus.
  • Kornshell hat die Syntax cd old new die old mit new in Ihrem Verzeichnis und CDs dort ersetzt. Es ist praktisch, wenn Sie in einem Verzeichnis namens /foo/bar/barfoo/one/bar/bar/foo/bar sind, und Sie müssen cd In Kornshell /foo/bar/barfoo/two/bar/bar/foo/bar, können Sie einfach cd one two tun und mit ihm getan werden. In BASH, würden Sie cd ../../../../../two/bar/bar/foo/bar haben.

Ich bin ein alter Mann Kornshell, weil ich Unix in den 1990er Jahren gelernt, und das war die Schale der Wahl damals. Ich kann Bash, aber ich frustriert, indem sie es manchmal, weil in Gewohnheit verwende ich einige kleinere Feature, das Kornshell, dass BASH hat nicht und es funktioniert nicht. Also, wann immer möglich, habe ich als Standard-Kornshell.

Aber ich werde Ihnen sagen, BASH zu lernen. Bash ist jetzt auf den meisten Unix-Systemen implementiert sowie auf Linux, und es gibt einfach mehr Ressourcen für BASH Lernen und Hilfe als Kornshell. Wenn Sie etwas Exotisches in BASH tun müssen, können Sie auf Stackoverflow gehen, stellen Sie Ihre Frage, und Sie werden ein Dutzend Antworten in wenigen Minuten erhalten -. Und einige von ihnen werden sogar richtig sein

Wenn Sie eine Frage haben und Kornshell per Post auf Stackoverflow, werden Sie für einige alte Vergangenheit ihren besten Hacker warten müssen wie ich aus seinem Nickerchen aufwachen, bevor Sie eine Antwort bekommen. Und vergisst keine Antwort bekommen, wenn sie Pudding bis im Alter zu Hause an diesem Tag sind zu dienen.

BASH ist einfach die Schale der Wahl jetzt, wenn Sie also etwas lernen haben, könnte mit so gut gehen, was sehr beliebt ist.

Ich bin ein Kornschalen-Veteran, also wissen Sie, dass ich aus dieser Perspektive spreche.

Ich bin jedoch mit der Bourne-Shell, ksh88 und ksh93 vertraut und weiß größtenteils, welche Funktionen in welchen unterstützt werden.(Ich sollte ksh88 hier überspringen, da es nicht mehr weit verbreitet ist.)

Nehmen Sie für die interaktive Nutzung alles, was Ihren Anforderungen entspricht.Experiment.Mir gefällt es, dass ich die gleiche Shell sowohl für die interaktive Nutzung als auch für die Programmierung verwenden kann.

Ich bin von ksh88 auf SVR2 zu tcsh, zu ksh88sun (was erhebliche Unterstützung für die Internationalisierung hinzugefügt hat) und ksh93 gegangen.Ich versuchte zu bash und hasste es, weil es meine Geschichte abgeflacht hat.Dann habe ich es entdeckt shopt -s lithist und alles war gut.(Der lithist Option versichert, dass Neulisten in Ihrem Befehlsgeschichte erhalten bleiben.)

Für die Shell-Programmierung würde ich ksh93 ernsthaft empfehlen, wenn Sie eine konsistente Programmiersprache, gute POSIX-Konformität und gute Leistung wünschen, da viele gängige Unix-Befehle als integrierte Funktionen verfügbar sein können.

Wenn Sie Portabilität wünschen, verwenden Sie mindestens beide.Und stellen Sie sicher, dass Sie über eine gute Testsuite verfügen.

Es gibt viele subtile Unterschiede zwischen Muscheln.Betrachten Sie zum Beispiel das Lesen aus einer Pfeife:

b=42 && echo one two three four |
    read a b junk && echo $b

Dies führt in verschiedenen Shells zu unterschiedlichen Ergebnissen.Die Kornschale führt Rohrleitungen von hinten nach vorne;Das letzte Element in der Pipeline wird im aktuellen Prozess ausgeführt.Bash unterstützte dieses nützliche Verhalten erst in Version 4.x, und selbst dann ist es nicht die Standardeinstellung.

Ein weiteres Beispiel zur Veranschaulichung der Konsistenz:Der echo Befehl selbst, der durch die Trennung zwischen BSD und SYSV-Unix überholt wurde, und jeder führte seine eigene Konvention für das Nichtdrucken von Zeilenumbrüchen (und anderes Verhalten) ein.Das Ergebnis ist immer noch in vielen „configure“-Skripten zu sehen.

Ksh ging das radikal an – und führte das ein print Befehl, der tatsächlich beide Methoden unterstützt (die -n Option von BSD und die nachfolgende Option \c Sonderzeichen aus SYSV)

Für ernsthafte Systemprogrammierung würde ich jedoch etwas anderes als eine Shell empfehlen, wie Python oder Perl.Oder gehen Sie noch einen Schritt weiter und verwenden Sie eine Plattform wie Puppet, mit der Sie den Zustand ganzer Systemcluster mit guter Prüfung überwachen und korrigieren können.

Shell-Programmierung ist wie das Schwimmen in unbekannten Gewässern oder Schlimmeres.

Das Programmieren in einer beliebigen Sprache erfordert Vertrautheit mit deren Syntax, Schnittstellen und Verhalten.Bei der Shell-Programmierung ist es nicht anders.

Ich habe keine Erfahrung mit KSH, aber ich habe sowohl bash und zsh verwendet. Ich ziehe es zsh über bash wegen seiner Unterstützung für sehr leistungsfähige Datei Globbing, variable Expansions Modifikatoren und schneller Tabulatorvervollständigung.

Hier ist eine kurze Einführung: http://friedcpu.wordpress.com/2007/07/24/zsh-the-last-shell-youll-ever-need/

Dies ist ein bisschen wie ein Unix vs Linux Kampf. Die meisten, wenn nicht alle Linux-Distributionen haben bash installiert und optional ksh. Die meisten Unix-Systemen wie Solaris, AIX und HP-UX sind als Standard ksh.

Ich persönlich verwende immer KSH, ich liebe die vi Fertigstellung und ich ziemlich viel Einsatz Solaris für alles.

Für Skripte, verwende ich immer KSH , weil es glättet über gotchas .

Aber ich finde bash mehr Komfort für die interaktive Nutzung. Für mich sind die Emacs Tastenbelegungen und Tabulatorvervollständigung sind die wichtigsten Vorteile. Aber das ist vor allem der Macht der Gewohnheit, nicht technisches Problem mit KSH .

@foxxtrot

Eigentlich ist das Standard-Shell ist die Bourne-Shell (sh). /bin/sh auf Linux ist eigentlich bash, aber wenn Sie sind mit dem Ziel für die Cross-Plattform-Skripte, sind Sie besser dran, um Funktionen des Original-Bourne-Shell kleben oder es in so etwas wie perl zu schreiben.

Meine Antwort wäre ‚eine auswählen und lernen, wie es zu benutzen.‘ Sie sind beide anständige Schalen; bash hat wahrscheinlich mehr Schnickschnack, aber sie haben beide die grundlegenden Funktionen Sie wollen. bash ist universell in diesen Tagen zur Verfügung. Wenn Sie mit Linux die ganze Zeit, nur dabei bleiben.

Wenn Sie die Programmierung, versuchen für die Portabilität zu schlicht ‚sh‘ zu halten ist eine gute Übung, aber dann mit bash zur Verfügung, so weit in diesen Tagen, dass wenig Beratung ist wahrscheinlich ein bisschen altmodisch.

Erfahren Sie, wie Sie mit Fertigstellung und Shell Geschichte; Lesen Sie die Manpage gelegentlich und versuchen, ein paar neue Dinge zu lernen.

Für eine Sache, hat bash Tabulatorvervollständigung. Das allein ist genug, um mich über KSH machen bevorzugen.

Z-Shell eine gute Kombination von KSH einzigartigen Funktionen mit den schönen Dingen hat, die bash bietet, und vieles mehr Sachen obendrein.

Erhältlich in den meisten UNIX-System, KSH ist standard comliant, übersichtlich gestaltet, gut abgerundet. Ich denke, Bücher, in KSH hilft, ist genug und klar, vor allem das O'Reilly Buch. Bash ist eine Masse. Ich halte es als root-Login-Shell für Linux zu Hause nur.

Für die interaktive Nutzung, ziehe ich zsh unter Linux / UNIX. Ich betreibe Skripte in zsh, aber ich werde testen, die meisten meiner Skripte, Funktionen in AIX ksh though.

Bash ist der Maßstab, aber das ist vor allem, weil man ziemlich sicher sein, kann es auf jedem * nichts installiert ist da draußen. Wenn Sie die Skripte verteilen planen, verwenden Bash.

Ich kann nicht wirklich die eigentliche Programmierung Unterschiede zwischen den Schalen adressiert, leider.

Bash ist der Standard für Linux.
Meine Erfahrung ist, dass es einfacher ist, Hilfe für bash zu finden, als für ksh oder csh.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top