Zukunft der System Shell

Soonwald

Well-Known Member
Nun haben wir ja die gute alte csh oder tcsh ( welche es nun wirklich ist, weiss so genau wohl keiner mehr ) als default bzw. Systemshell.
Und jeder kann sich dann seine Lieblingsshell nachträglich installieren und zuweisen.
Die Linuxianer haben ihre geliebte bash - bei OSX sind wir nach csh und einigen Jahren bash nun neuerdings - seit 2019 und Catalina - bei der zsh angekommen. Das hatte wohl nur lizenzrechtliche Gründe von Apple - aber dennoch ist mit der zsh eine relativ moderne und nicht so gewöhnungsbedürftige Shell ( wie IMHO bash ) auf den Macs. - zumindest mal für die, für die iterm2, tmux etc. kein kryptisches Zeugs sind.

Wie sieht das bei BSD aus? Ist da die csh bis zum Ende der Welt zementiert?
 
Ich nutze die KSH weil die bei OpenBSD standard Installation ist und damit komme ich recht gut zurecht. :)

Wenn ich eine andere wollte ist das da auch kein Problem einfach mit pkg_add installieren und chsh einstellen.

Was mir nur aufgefallen ist, das es tools gibt wie abcde z.B. die zwingend die Bash mitinstallieren oder Screenfetch aber ich denke das liegt daran das Sie in Bash geschrieben sind.
 
Wie sieht das bei BSD aus? Ist da die csh bis zum Ende der Welt zementiert?
Also OpenBSD hat als default Shells die ksh. Und es müsste schon nen guten Grund geben warum man etwas, was sich Jahren und Jahrzehnten bewährt hat, ändert… dass eine Shell "more fancy" ist … kein guter Grund
 
dass eine Shell "more fancy" ist … kein guter Grund

ein etwas besserer Grund könnte die größere Kompatibilität sein. Wer stolpert als Nutzer der tcsh oder anderer nicht-bash-Shells nicht gelegentlich über einen typischen "Bashismus", der in Scripts vorhanden ist. Fast bin ich an der Stelle schon geneigt, den Spruch los zu lassen: "mach es wie bei Linux", denn dort werden eben doch die meisten Freien Projekte entworfen und umgesetzt.
Wäre es nicht sooo kompliziert, tatsächlich mit der bash umzugehen.
Oder zsh, nebenbei bemerkt.
Die tcsh ist einfach viel einfacher (für mich) und ich habe mich daran gewöhnt, so sehr, dass ich sie schon einigen GNU/Linuxen beigebracht hatte, was natürlich dort erst recht zu Kollisionen mit "Bashismen" führte.

Wenn ich da eine Stimme hätte, würde ich also am liebsten nichts ändern und bei der tcsh für FreeBSD bleiben.
Würde ich eine globale Stimme abgeben müssen, um dabei mit zu entscheiden, welche Shell denn zur zukünftigen Standard-Shell für alle unixoiden Systeme gekürt werden sollte, würde ich sehr wahrscheinlich auch für die zsh stimmen, also gemeinsam mit Apple.
 
Interessant wie viele Stimmen hier die bash für kompliziert halten :D
Ich bin quasi mit Linux groß geworden und finde eher die csh/tcsh umständlich. Aber ist halt Geschmackssache. Und wie schon erwähnt, ne andere Shell nachzuziehen ist keine große Arbeit unter *bsd.
 
Interessant wie viele Stimmen hier die bash für kompliziert halten :D
Ich bin quasi mit Linux groß geworden .....

Genau, vielleicht ist es auch eher eine Generationenfrage. Wer wie ich vor 40 Jahren den ersten Kontakt zur Unix Welt hatte ( damals System V von AT&T ) der kennt die csh und später die tcsh - die darauffolgenden Generation die dann mit Linux aufwuchs - denen wurde die bash mit in die Wiege gelegt.
Aus dieser Perspektive ist die zsh aber ein guter Kompromis - finde ich zumindest
 
ein etwas besserer Grund könnte die größere Kompatibilität sein. Wer stolpert als Nutzer der tcsh oder anderer nicht-bash-Shells nicht gelegentlich über einen typischen "Bashismus", der in Scripts vorhanden ist. Fast bin ich an der Stelle schon geneigt, den Spruch los zu lassen: "mach es wie bei Linux", denn dort werden eben doch die meisten Freien Projekte entworfen und umgesetzt.
Wäre es nicht sooo kompliziert, tatsächlich mit der bash umzugehen.
Oder zsh, nebenbei bemerkt.
Die tcsh ist einfach viel einfacher (für mich) und ich habe mich daran gewöhnt, so sehr, dass ich sie schon einigen GNU/Linuxen beigebracht hatte, was natürlich dort erst recht zu Kollisionen mit "Bashismen" führte.

Wenn ich da eine Stimme hätte, würde ich also am liebsten nichts ändern und bei der tcsh für FreeBSD bleiben.
Würde ich eine globale Stimme abgeben müssen, um dabei mit zu entscheiden, welche Shell denn zur zukünftigen Standard-Shell für alle unixoiden Systeme gekürt werden sollte, würde ich sehr wahrscheinlich auch für die zsh stimmen, also gemeinsam mit Apple.

Ich verwende jetzt 3 Shells … KSH wegen meinem OpenBSD Softspot. Bash bei Kundensystemen und denen wo ich zu faul war ZSH zu installieren und ZSH. Es sind halt alles Bourne Shell basierende/kompatible shells. Vorziehen tue ich eindeutig die ZSH.
Ich glaube allerdings, das man den Punkt Kompatibilität gerade nicht anbringen kann, da ein Wechsel erst einmal die Kompatibilität am wichtigsten Ort (zer)stört. Nämlich in der Versionskompatibilität… was nützt es wenn man endlich mit dem Klassenfeind (linux) "kompatibel" ist aber mit der Vorgängerversion des eigenen BSD's nicht mehr wirklich?
Und da die Shell nun wirklich das kleinste der Probleme in de Kompatibilität ist würde ich sagen… z.Z. ist's noch gut so wies ist.
 
Ich muss mich auf der Arbeit mit Windows 10 rumärgern. Trost ist, der Chef bezahlt es. Wenn ich was auf der Konsole mache, nutze ich dafür Linux on Windows oder wie das heißt. Ist nicht FreeBSD, aber alle mal besser als diese Windows Konsolen.
 
:D:D alter Schwede, da schieß ich mir lieber selber ins Bein, bevor ich diese poweshell verwende..

Ich bin wirklich kein Windows Fan, aber habt ihr der Shell jemals ne Chance gegeben? Wenn man sich da mal einarbeitet ist die eigentlich ganz cool, der objektorientierte Ansatz ist auch ne coole Sache, die zsh baut da manches der PowerShell kompliziert nach..
Bei allem was man über Windows schimpfen kann, die PowerShell ist es nicht..
 
Bei GhostBSD und NomadBSD ist neuerdings die fish als Standard eingestellt. Welche Vorteile hat denn diese? Ich hatte mich die letzten Jahrzehnte auf die tcsh eingeschossen, lerne aber gerne dazu.
 
cshwasfürzeuch?

Man nimmt Bourne-Shells und vergisst, dass es die csh je gegeben hat.
This. Es geht gar nicht um fancy oder wasweißichwas (dafür installiere ich mir seit Ewigkeiten auf jedem "unix-artigen" System eine zsh, weil die einfach verdammt viel cooles Zeug kann) -- als "default" lieber etwas kleineres zu nehmen hat aber durchaus seine Berechtigung.

Aber es sollte in jedem Fall eine Bourne Shell sein. C-Shells sind krudes "broken by design" Zeug. Alles in allem bin ich ziemlich begeistert von FreeBSD -- dass allerdings ausgerechnet eine C-Shell "Standard" ist gehört zu den wenigen Dingen, die ich beim besten Willen nicht nachvollziehen kann.
 
Ich bin wirklich kein Windows Fan, aber habt ihr der Shell jemals ne Chance gegeben? Wenn man sich da mal einarbeitet ist die eigentlich ganz cool, der objektorientierte Ansatz ist auch ne coole Sache ...

also statt
Code:
rm -rf /
dann:
Code:
Get-PSDrive -p "FileSystem" | % { ls -Recurse $_.Root | rm –Force }

ich mach mir mal jetzt noch n Kirner - Schinderhannes - Bock - Bier auf ...
 
also statt
Code:
rm -rf /
dann:
Code:
Get-PSDrive -p "FileSystem" | % { ls -Recurse $_.Root | rm –Force }

ich mach mir mal jetzt noch n Kirner - Schinderhannes - Bock - Bier auf ...

Dazu im Gegensatz steht jede Befehlskette bei der ich auf *NIX erstmal Zeilen mit sed oder awk brauche um irgend was rauszuparsen. Wenn du rm -rf / wirklich häufig in Scripten brauchen solltest kannst du dir ne Funktion anlegen.

Ich sage nicht dass die Powershell uneingeschrenkt besser als die Bash/csh/zsh ist, ich sage der objektorientierte Ansatz ist in komplexeren Scripten schön und oft einfacher.
 
Hallo,

dass allerdings ausgerechnet eine C-Shell "Standard" ist gehört zu den wenigen Dingen, die ich beim besten Willen nicht nachvollziehen kann

Apropos C-Shell: zwar nur eine Randbemerkung mir, also von jemandem, der sich nicht gut mit den Unterschieden zwischen C-shell, t-shell, bash u.s.f. auskennt, sich aber gerne auf FreeBSD die Bash installiert, weil vieles, was mit Thirdparty-Userland zu tun hat, aus dem Linuxbereich stammt (samt mancher Anleitungen, und da ist Bash Voraussetzung):
Kürzlich bin ich auf sanoid gestoßen. Das kann zwar eine ganze Menge, die ich nicht brauche, aber ich plane, bei mir rsync komplett durch sanoid (daraus das Werkzeug syncoid) für mein Backup im Heimnetzwerrk zu nutzen. Und da ist u.a. bei der Verwendung unter FreeBSD auch was zu Shells zu lesen:
Syncoid assumes a bourne style shell on remote hosts. Using (t)csh (the default for root under FreeBSD)
has some known issues:
* If mbuffer is present, syncoid will fail with an "Ambiguous output redirect." error. So if you:
root@bsd:~# ln -s /usr/local/bin/mbuffer /usr/bin/mbuffer
make sure the remote user is using an sh compatible shell.

To change to a compatible shell, use the chsh command:
root@bsd:~# chsh -s /bin/sh

OffTopic: Habe mit syncoid schon mal etwas experimentiert, mache dazu vielleicht mal einen neuen Thread auf.
 
Die Frage, wieso die csh / tcsh unter FreeBSD voreingestellt ist, kommt alle paar Monate mal wieder auf den Mailinglisten hoch. Die einzige Antwort ist dann meist, dass es nur die Standardshell des Root-Accounts ist. User-Accounts haben keine Standard-Shell, adduser fragte nach und wenn man einfach auf Enter haut, gibt es die sh. Das Gleiche ist der Fall, wenn man mit pw keine Shell angibt. Weitere Antworten und Meinungen gibt es dazu meist nicht. Denn Shells sind genauso wie Editoren oder seit einiger Zeit auch init-Systeme eine hochemotionale Angelegenheit, bei der sich trotz langer Diskussionen mit hoher Tendenz zum Bikeshedding eh kein Konsens erreichen lässt. Also macht man das Fass erst gar nicht auf.

Die Traditionalisten wollen dann ihre csh / tcsh behalten. Ich habe sie selbst sehr lange Zeit genutzt und bin immer noch der Meinung, dass die tcsh eine sehr gute interaktive Shell ist. Die Möglichkeiten zur Manipulation der Historie, der mächtige Line-Editor und etwas obskurere Dinge wie Magic-Space bieten in dem Paket nur wenige andere Shells, die von mir benutzten Funktionen sogar nur die zsh komplett. Weshalb ich dann irgendwann auch irgendwann dahin gewechselt bin. Auch die Embedded Fraktion mag die tcsh, da sie eben eine gute interaktive Shell ist, dabei aber einen überschaubaren Speicherabdruck hat. zsh und bash sind da schon ganz andere Kaliber, sh und die verschiedenen Korn-Shells als interaktive Shell wieder unkomfortabler. Das Problem der csh / tcsh sind halt die rechte beschränkten Möglichkeiten für Redirects, File Descriptor Manipulation und die fürchterliche Scriptsprache. Gerade letztere war für mich irgendwann der Grund zum Wechsel, nicht erst 'sh' tippen zu müssen, wenn man eine Schleife ins Prompt hauen will, ist dann doch irgendwo schön. Und der vi-Mode der csh / tcsh ist unbenutzbar mies implementiert.

Die sagen wir mal mittlere Generation möchte eine Shell aus der weiteren Bourne-Familie. Das ist verständlich, die Bourne-Familie bietet eine gute Scriptsprache, viele Möglichkeiten für Redirects und File Descriptor Kram und oft noch mehr Goodies. Das Problem ist nur, welche der vielen Möglichkeiten. Die Einen wollen eine möglichst reine Bourne-Shell. Der Wunsch ist oft FreeBSDs sh um einige interaktive Funktionen zu erweitern. Nur führt das zwangsläufig zum Konflikt mit der Embedded Fraktion, die /bin/sh so schlank wie möglich halten möchte. Andere möchten eine Korn-Shell. ksh88 und ksh93 sind da die reinen Lehren, die mksh ist auch immer beliebt. In meinen Augen ist die mksh eine sehr schöne Shell, durch ihre sehr rudimentäre History-Implementierung aber problematisch. Die Bash-Fraktion ist ebenfalls stark, aber durch die GPL3 ist die Bash keine Option. Die zsh wiederum ist selbst in minimaler Fassung ohne die optionalen Module ein ziemliches Biest und mit ihrem recht schnellen Release-Zyklus nicht unbedingt mit dem konservativen Basissystem vereinbar.

Und dann gibt es die Jungsspunde, sowie Spezialisten. Dort sieht man die oben schon genannte fish immer öfter, ich hatte schon mehrere Schüler-Praktikanten, die sie voller Überzeugung nutzten. Seitdem das .Net-Framework auch unter Linux immer beliebter wird, wird es auch die Powershell. Es gab sogar schon ein GSoC-Projekt sie auf FreeBSD zu portieren. Python-Fans mögen ihre Xonsh. Und so weiter.

Kurz gesagt, man kann es nicht allen recht machen. Egal, was man als Standard-Shell für den Root-User wählt, es sind immer mehr Benutzer unzufrieden als glücklich. Und daher bleibt es eben csh / tcsh, weil sie es immer waren. Und mal ehrlich. Die 5 Minuten im Monat, die man als root unterwegs ist, kann man damit leben. Und wenn nicht, kann man immer noch den toor-User aktivieren, ihn auf csh / tcsh lassen und die Shell vom root umstellen. Zerschießt man sie sich durch ein schiefgegangenes Paketupdate oder so, rettet man sich mit toor.
 
Kurz gesagt, man kann es nicht allen recht machen. Egal, was man als Standard-Shell für den Root-User wählt, es sind immer mehr Benutzer unzufrieden als glücklich. Und daher bleibt es eben csh / tcsh, weil sie es immer waren.
Ja sicher ... das Problem mit dieser Wahl ist eben, dass es eine C-Shell ist, und richtig, die eklatanten Schwächen haben C-Shells bei Scripts. Deshalb erwartet auch so ziemlich jedes Shellscript eine POSIX oder Bourne Shell. Ich will es auch als interaktive Shell nicht, weil ich keine Lust habe, mir unterschiedliche Syntax für interaktiv vs Script zu merken ;)
Und wenn nicht, kann man immer noch den toor-User aktivieren, ihn auf csh / tcsh lassen und die Shell vom root umstellen. Zerschießt man sie sich durch ein schiefgegangenes Paketupdate oder so, rettet man sich mit toor.
Das ist in der Tat der übliche Workaround. (Ich mache es ein bisschen anders: Ich baue FreeBSD ohne die tcsh. Wenn tatsächlich die zsh mal nicht verfügbar ist, kann man auch /bin/sh interaktiv benutzen .. auch wenn man das nicht will, zum System retten reicht es ;))
Seitdem das .Net-Framework auch unter Linux immer beliebter wird, wird es auch die Powershell. Es gab sogar schon ein GSoC-Projekt sie auf FreeBSD zu portieren.
uhhh ... gruselig :o
 
also statt
Code:
rm -rf /

dann:

Code:
Get-PSDrive -p "FileSystem" | % { ls -Recurse $_.Root | rm –Force }

ich mach mir mal jetzt noch n Kirner - Schinderhannes - Bock - Bier auf ...

Wir wollen fair bleiben - das Äquivalent unter PowerShell ist:
Code:
rm C:\* -r -fo
Ich kann natürlich auch unter Unix find ohne Mehrwert einbeziehen, um eine Seite künstlich schlecht darzustellen.

Bei aller Liebe zum üblichen Windows-Bashing (sic!), PowerShell kann einiges deutlich besser und mehr als unsere gewohnten Unix-Shells, sofern man auf der dazu passenden Umgebung unterwegs ist. Soviel Ehrlichkeit muss sein.

Bei GhostBSD und NomadBSD ist neuerdings die fish als Standard eingestellt. Welche Vorteile hat denn diese? Ich hatte mich die letzten Jahrzehnte auf die tcsh eingeschossen, lerne aber gerne dazu.

Die gute fish kann Autovervollständigung, Syntax-Highlighting, ordentliche Schleifen und hat eine perfekt integrierte History, um nur einige Vorteile zu nennen.

In der Tat ist fish meine Lieblings-Shell, trotzdem nutze ich sie privat wie beruflich nicht. In der Praxis ist man heutzutage im professionellen Umfeld - in dem man oftmals nicht jede Umgebung personalisieren kann und will - fast immer in einer bash unterwegs, so dass man jedes Mal daran denken müsste, in welcher Shell man aktuell ist.

Deswegen mein persönliches Fazit: bash(-kompatible) Shells bitte überall. :)
 
Zurück
Oben