ubuntuusers.de

sh vs bash vs dash

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

Cyraid

Anmeldungsdatum:
2. April 2009

Beiträge: 16

Hallo liebe Community,

immer wieder verwirren mich die Begriffe "sh", "bash", "dash", "shell", etc.

Historisch sind viele unterschiedliche shells herangewachsen und die bash (bourne-again shell) ist heute wohl die verbreitetste. Dennoch verwirren mich diese Begriffe immer wieder.

1. Was benutzt Ubuntu 12.04 ?

1
2
3
4
user@ubuntu:~$ ll $(which bash)
-rwxr-xr-x 1 root root 920788 Apr  3 17:58 /bin/bash*
user@ubuntu:~$ ll $(which sh)
lrwxrwxrwx 1 root root 4 Mar 29 19:40 /bin/sh -> dash*

Wenn ich es richtig sehe, gibt es also zwei verschiedene Shells hier: "bash" und "dash".

2. Worin liegt deren Hauptunterschied ?

3. Welche shell wird benutzt, wenn ich das "Terminal" öffne bzw. wo kann ich nachschauen, welche shell benutzt wird ?

4. Welche shell wird üblicherweise eingesetzt, wenn man ein Shell-Skript schreibt und warum ?

Ich hoffe, jemand aus der erfahrenen Community kann mir diese (trivialen) Fragen beantworten ☺

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13166

Cyraid schrieb:

Hallo liebe Community,

immer wieder verwirren mich die Begriffe "sh", "bash", "dash", "shell", etc.

Historisch sind viele unterschiedliche shells herangewachsen und die bash (bourne-again shell) ist heute wohl die verbreitetste. Dennoch verwirren mich diese Begriffe immer wieder.

1. Was benutzt Ubuntu 12.04 ?

1
2
3
4
user@ubuntu:~$ ll $(which bash)
-rwxr-xr-x 1 root root 920788 Apr  3 17:58 /bin/bash*
user@ubuntu:~$ ll $(which sh)
lrwxrwxrwx 1 root root 4 Mar 29 19:40 /bin/sh -> dash*

Die Frage hast Du Dir selber beantwortet. ☺ Ansonsten kann das natürlich sowohl von Skript zu Skript unterschiedlich sein shebang und auch jeder Benutzer kann eine beliebige Shell eingestellt haben.

Wenn ich es richtig sehe, gibt es also zwei verschiedene Shells hier: "bash" und "dash".

Es gibt noch deutlich mehr, mindestens diese:

  • csh

  • tcsh

  • ksh

  • pdksh

  • zsh

2. Worin liegt deren Hauptunterschied ?

Die csh und tcsh haben eine deutlich andere Syntax. Die anderen Shells sind mehr oder weniger kompatibel zur Syntax und zum Funktionsumfang des POSIX-Standards. Was man benutzt, ist Geschmacks- und Gewohnheitssache. Ich z.B. mag (t)csh überhaupt nicht.

3. Welche shell wird benutzt, wenn ich das "Terminal" öffne bzw. wo kann ich nachschauen, welche shell benutzt wird ?

Typischerweise die, die für Deinen Benutzer eingestellt ist. Das kannst Du herausfinden mit

1
$ egrep "^$(id -un):" /etc/passwd

4. Welche shell wird üblicherweise eingesetzt, wenn man ein Shell-Skript schreibt und warum ?

Ich benutze die dash so lange ich keine besonderen Features der bash benutze (i.d.R. Arrays), weil die dash ein bisschen kleiner und schneller ist.

Ich hoffe, jemand aus der erfahrenen Community kann mir diese (trivialen) Fragen beantworten ☺

Ich hoffe, die Antworten reichen. Sonst einfach nachfragen.

Ciao

robert

Antiqua Team-Icon

Avatar von Antiqua

Anmeldungsdatum:
30. Dezember 2008

Beiträge: 4534

Cyraid schrieb:

1. Was benutzt Ubuntu 12.04 ?

Standardmäßig die Dash und die Bash

Wenn ich es richtig sehe, gibt es also zwei verschiedene Shells hier: "bash" und "dash".

Richtig

2. Worin liegt deren Hauptunterschied ?

Bitte lies im Wiki nach, da dürfte das wichtigste stehen. Shell bzw. die weiterführenden Links Dash und Bash

3. Welche shell wird benutzt, wenn ich das "Terminal" öffne bzw. wo kann ich nachschauen, welche shell benutzt wird ?

Da wird normalerweise (also als Standardeinstellung unter Ubuntu) die Bash benutzt. Was bringt ein

echo $SHELL

4. Welche shell wird üblicherweise eingesetzt, wenn man ein Shell-Skript schreibt und warum ?

Das kommt darauf an, welche Shell du benutzen willst. Üblicherweise ist das "üblicherweise" sehr subjektiv 😉

Edit: rklm war schneller ☺

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13166

Antiqua schrieb:

Edit: rklm war schneller ☺

Ja, aber ich hatte noch diesen Tipp zum Herausfinden der Shell im Terminal vergessen einzufügen:

1
$ ps -l $$

Ciao

robert

Cyraid

(Themenstarter)

Anmeldungsdatum:
2. April 2009

Beiträge: 16

Herzlichen Dank, die Antworten haben mir bereits sehr geholfen.

rklm schrieb:

4. Welche shell wird üblicherweise eingesetzt, wenn man ein Shell-Skript schreibt und warum ?

Ich benutze die dash so lange ich keine besonderen Features der bash benutze (i.d.R. Arrays), weil die dash ein bisschen kleiner und schneller ist.

Oh, gut zu wissen. Kann es sein, dass die dash auch keine eigenen Funktionen unterstützt (oder in einer anderen Syntax als für die bash) ?

Als ich einmal ein Skript schrieb mit #!/bin/sh klappt das Ausführen einer Funktion wie function myFunc { echo test} nicht. Nach der Umstellung auf #!/bin/bash lief es problemlos.

Zusatzfrage: $$ wurde benutzt, um die pid der aktuell benutzten shell abzufragen. D.h. hier wird die Variable mit dem Namen $ ausgewertet indem man ein $ voranstellt ?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13166

Cyraid schrieb:

Oh, gut zu wissen. Kann es sein, dass die dash auch keine eigenen Funktionen unterstützt (oder in einer anderen Syntax als für die bash) ?

Doch, das tut sie (die Manpage ist übrigens auch eine ziemlich gute Quelle für Informationen über ein Programm ☺).

Als ich einmal ein Skript schrieb mit #!/bin/sh klappt das Ausführen einer Funktion wie function myFunc { echo test} nicht. Nach der Umstellung auf #!/bin/bash lief es problemlos.

Du benutzt da eine spezifische Syntax für Funktionen, die nicht der POSIX-Syntax entspricht. Wenn man die Standardsyntax nimmt, geht es:

1
2
3
$ dash -c 'f(){ echo "args: $*"; }; f 1; f a b'
args: 1
args: a b

Zusatzfrage: $$ wurde benutzt, um die pid der aktuell benutzten shell abzufragen. D.h. hier wird die Variable mit dem Namen $ ausgewertet indem man ein $ voranstellt ?

Genau. Das ist eine der vordefinierten Shell-Variablen (steht auch auf der Manpage ☺).

Ciao

robert

Antworten |