bash, sh, zsh oder was bei Debian?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Hans-Wilhelm
Beiträge: 332
Registriert: 07.06.2007 20:01:12

bash, sh, zsh oder was bei Debian?

Beitrag von Hans-Wilhelm » 18.10.2012 12:53:22

Ich habe hier einige alte scripte die kommen mit

#!/bin/bash
oder
#!/bin/sh

in der ersten Zeile.

Sollte ich das mal alles auf #!/bin/bash ändern oder mich für was anderes entscheiden oder ist das völlig egal?

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: bash, sh, zsh oder was bei Debian?

Beitrag von hikaru » 18.10.2012 13:11:32

Syntaktisch unterscheiden sich die verschiedenen Shells schon in den Details. /bin/sh ist unter Debian für gewöhnlich ein Link auf /bin/dash.
Wenn du also bash-Scripts hast solltest du sie auch explizit damit aufrufen falls du "komische Effekte" vermeiden willst.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: bash, sh, zsh oder was bei Debian?

Beitrag von Cae » 18.10.2012 18:28:51

Es wird schon seinen Grund haben, warum jeweils die Shell oder die Bash verwendet wird. Die Shell (wie schon erwähnt, zumeist die Dash) ist schlanker und schneller, hat aber einige Funktionen nicht. Normalerweise braucht man die Bash-Erweiterungen nicht, aber das kommt halt auf das Skript an.

Ich sehe keinen Mehrwert darin, alles auf die Bash umzustellen. Wenn du selbst skriptest, nimm' einfach die sh, und wenn irgendwas nicht geht, guckst du in die Manpage dazu und stellst bei fehlender Funktion die Shebang auf bash um oder änderst deinen Code.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Hans-Wilhelm
Beiträge: 332
Registriert: 07.06.2007 20:01:12

Re: bash, sh, zsh oder was bei Debian?

Beitrag von Hans-Wilhelm » 19.10.2012 13:09:31

Das sind alles von mir selbst geschriebene Scripte. Nichts grosses. Eigentlich sehr simpel. Dateioperationen oder viel sed. Angefangen habe ich damals mit einer Kopie von einem Fremdscript und da wurde die sh genutzt. Später habe ich dann bash genommen oder auch die sh. Von daher müßte es eigentlich egal sein.

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bash, sh, zsh oder was bei Debian?

Beitrag von Meillo » 19.10.2012 20:49:48

Hans-Wilhelm hat geschrieben: Sollte ich das mal alles auf #!/bin/bash ändern [...]
Nein. Davon hast du keinen Mehrwert. Die bash bietet eine Obermenge der sh. Was in der sh laeuft, laeuft auch in der bash. Wenn im Shebang /bin/sh steht, dann wird das von irgendeiner sh-kompatiblen Shell (z.B. der dash oder der bash) ausgefuehrt. Wenn im Shebang /bin/bash steht, dann wir sicher die bash genommen.

Scripte mit /bin/sh im Shebang (die auch nur sh-Features beinhalten!) laufen auf jedem Unix. Steht /bin/bash im Shebang, dann wird's schon bei den BSDs schwierig, weil dort die bash oft unter /usr/pkg/bin/bash installiert ist.

Idealerweise steht im Shebang der allgemeinste Interpreter der das Script verarbeiten kann.

Und jetzt noch kurz und pragmatisch: Lass alles wie's ist. :-)

Cae hat geschrieben: Wenn du selbst skriptest, nimm' einfach die sh, und wenn irgendwas nicht geht, guckst du in die Manpage dazu und stellst bei fehlender Funktion die Shebang auf bash um oder änderst deinen Code.
Wenn wenig Erfahrung vorhanden ist, dann empfehle ich besser gleich /bin/bash in den Shebang zu schreiben, denn Bashisms in /bin/sh-Scripten sind schlimmer als bash-Scripte.
Use ed once in a while!

Hans-Wilhelm
Beiträge: 332
Registriert: 07.06.2007 20:01:12

Re: bash, sh, zsh oder was bei Debian?

Beitrag von Hans-Wilhelm » 20.10.2012 13:02:12

Meillo hat geschrieben:
Hans-Wilhelm hat geschrieben: Sollte ich das mal alles auf #!/bin/bash ändern [...]
Nein. Davon hast du keinen Mehrwert. Die bash bietet eine Obermenge der sh. Was in der sh laeuft, laeuft auch in der bash. Wenn im Shebang /bin/sh steht, dann wird das von irgendeiner sh-kompatiblen Shell (z.B. der dash oder der bash) ausgefuehrt. Wenn im Shebang /bin/bash steht, dann wir sicher die bash genommen.

Scripte mit /bin/sh im Shebang (die auch nur sh-Features beinhalten!) laufen auf jedem Unix. Steht /bin/bash im Shebang, dann wird's schon bei den BSDs schwierig, weil dort die bash oft unter /usr/pkg/bin/bash installiert ist.

Idealerweise steht im Shebang der allgemeinste Interpreter der das Script verarbeiten kann.

Und jetzt noch kurz und pragmatisch: Lass alles wie's ist. :-)

Cae hat geschrieben: Wenn du selbst skriptest, nimm' einfach die sh, und wenn irgendwas nicht geht, guckst du in die Manpage dazu und stellst bei fehlender Funktion die Shebang auf bash um oder änderst deinen Code.
Wenn wenig Erfahrung vorhanden ist, dann empfehle ich besser gleich /bin/bash in den Shebang zu schreiben, denn Bashisms in /bin/sh-Scripten sind schlimmer als bash-Scripte.
Danke für die tolle Antwort. Die Scripte mit bash sind in der Minderzahl. Ich nehme daher wieder sh. Ist wirklich nur Kinderkram. Meistens geht es um das Auslesen von Text oder html Dateien.

Antworten