Unterschied von #!/bin/sh und #!/bin/bash

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
ren22

Unterschied von #!/bin/sh und #!/bin/bash

Beitrag von ren22 » 23.12.2016 23:11:23

Hallo,

wo genau liegt der Unterschied von #!/bin/sh und #!/bin/bash ?
soweit ich weiß ist /bin/sh der standard und /bin/bash ist das gleiche mit mehr Funktionen und Features !?

Code: Alles auswählen

#!/bin/sh

List="abcd 1234 jvm something"
arr=($List)
echo ${arr[1]}
syntax error: unexpected "("
funktioniert nicht , warum ?

Code: Alles auswählen

#!/bin/bash

List="abcd 1234 jvm something"
arr=($List)
echo ${arr[1]}
funktioniert

Danke, frohes Fest

DeletedUserReAsG

Re: Unterschied von #!/bin/sh und #!/bin/bash

Beitrag von DeletedUserReAsG » 23.12.2016 23:17:12

Code: Alles auswählen

!/bin/sh
[…]
syntax error: unexpected "("
funktioniert nicht , warum ?

Code: Alles auswählen

#!/bin/bash
[…]
funktioniert
Im Grunde beantwortest du es dir doch selbst:
[…]/bin/bash ist das gleiche mit mehr Funktionen und Features
… und das Konstrukt mit den Klammern ist so eine Funktion/so ein Feature.

Benutzeravatar
heisenberg
Beiträge: 3548
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Unterschied von #!/bin/sh und #!/bin/bash

Beitrag von heisenberg » 23.12.2016 23:18:47

Die erste Zeile bestimmt den Kommandointerpreter. Du hast hier mit /bin/sh die Bourne-Shell(bzw. den Bourne-Shell-kompatiblen Modus). /bin/bash ist die Bourne-Again-Shell. Das ist die Bourne-Shell aufgemotzt mit 10000 mehr Funktionen.

Die Funktionen, die Du benutzt gehen eben nur mit der Bash und nicht mit der Bourne-Shell.

Je nach dem wo Du Deine Scripte einsetzt wähle den richtigen Interpreter. Falls Du nur für Dich selber ein bisschen Scriptest oder immer auf halbwegs aktuellen Linux-Kisten, dann kannst Du ruhig bei der Bash bleiben. Falls Du darauf angewiesen bist, dass Deine Script auf einer grossen Zahl von unterschiedlichen Unixartigen Systemen laufen, dann wähle besser die Bash.

Ist Deine Zielplattform der Embedded-Bereich, dann würde ich auch eher zur Bourne-Shell greifen oder zu Dash(Debian-Alquimist-Shell), eine 3. Variante(Es gibt noch viele mehr), die viele Zusatzfunktionen integriert hat, aber alles was viel Code erfordert hat weggelassen hat. So ist die Dash eine Shell, mit der man viel von dem Komfort der Bash hat, aber auch nur ein kleines Programm.

Hier sieht man auch nochmal den Unterschied der Shells in Sachen Programmgrösse...

Code: Alles auswählen

ls -l /bin/bash /bin/dash
-rwxr-xr-x 1 root root 1029624 Nov 13  2014 /bin/bash
-rwxr-xr-x 1 root root  125400 Nov  8  2014 /bin/dash
...und auch bzgl. der benutzten Bibliotheken:

Code: Alles auswählen

ldd /bin/dash 
	linux-vdso.so.1 (0x00007ffeb87a2000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff00fa62000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ff01002e000)
ldd /bin/bash
	linux-vdso.so.1 (0x00007fff49bbc000)
	libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007fa71ec31000)
	libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fa71ea07000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa71e803000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa71e458000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa71ee56000)
Jede Rohheit hat ihren Ursprung in einer Schwäche.

ren22

Re: Unterschied von #!/bin/sh und #!/bin/bash

Beitrag von ren22 » 23.12.2016 23:28:23

Falls Du nur für Dich selber ein bisschen Scriptest oder immer auf halbwegs aktuellen Linux-Kisten, dann kannst Du ruhig bei der Bash bleiben. Falls Du darauf angewiesen bist, dass Deine Script auf einer grossen Zahl von unterschiedlichen Unixartigen Systemen laufen, dann wähle besser die Bash.
wichtig wäre für mich, dass es am kompatibelsten ist. Also meine Erfahrung sagt mir das ich mit "#!/bin/sh" aka Bourne Shell besser besser liege. Weil ich meist "bash" immer nachinstallieren musste ...

Danke euch

cronoik
Beiträge: 2049
Registriert: 18.03.2012 21:13:42
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Unterschied von #!/bin/sh und #!/bin/bash

Beitrag von cronoik » 23.12.2016 23:38:11

heisenberg hat geschrieben:Die erste Zeile bestimmt den Kommandointerpreter. Du hast hier mit /bin/sh die Bourne-Shell(bzw. den Bourne-Shell-kompatiblen Modus)....
Wenn es sich um ein aktuelleres Debian bzw. Derivat handelt, dann hat er hier wahrscheinlich eine dash aufgerufen:

Code: Alles auswählen

ls -l /bin/sh
ren22 hat geschrieben:Weil ich meist "bash" immer nachinstallieren musste ...
Um welches System geht es hier? Die bash ist bei Debian ein essential Paket. Im Allgemeinen wuerde ich zu /bin/bash raten, ausser du hast einen Grund fuer etwas anderes.
Hilf mit unser Wiki zu verbessern!

ren22

Re: Unterschied von #!/bin/sh und #!/bin/bash

Beitrag von ren22 » 23.12.2016 23:47:06

Code: Alles auswählen

<$echo $SHELL
/bin/sh

Antworten