Ich glaube, ich habe Bash als Shell konfiguriert, aber warum passiert das?
Meine Shell ist bash:
# ls -al `which sh`
lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash
Fehler beim Ausführen eines Skripts mit sh
# sh ubuntu/util.sh
ubuntu/util.sh: line 32: `test-build-release': not a valid identifier
Kein Fehler von bash
# bash ubuntu/util.sh
Akzeptierte Antwort:
Es führt die ausführbare Bash-Datei aus, die Sie erwarten, aber Ihre Shell ist nicht einfach Bash; es ist bash, das in POSIX sh
läuft Kompatibilitätsmodus. Dies geschieht, indem es sich den Befehlsnamen ansieht, als der es aufgerufen wurde, und ob das sh
ist , dann aktiviert es automatisch den POSIX-Modus. Es leistet dabei einen sehr schlechten Job und sollte beim Testen von POSIX sh
nicht vollständig verwendet werden kompatible Skripte, sollte aber die zulässige Syntax erheblich einschränken.
–posix
Ändern Sie das Verhalten von Bash, wenn die Standardoperation vom POSIX-Standard abweicht, um es dem Standard anzupassen (Posix-Modus).
Siehe SIEHE AUCH unten für einen Verweis auf ein Dokument, das beschreibt, wie der Posix-Modus das Verhalten von Bash beeinflusst.
Und von http://tiswww.case.edu/php/chet/bash/POSIX :
Starten Sie Bash mit --posix
Befehlszeilenoption oder Ausführen von set
während Bash ausgeführt wird, bewirkt, dass Bash sich besser an den POSIX-Standard anpasst, indem das Verhalten so geändert wird, dass es dem
-o posix
entspricht, das von POSIX in Bereichen angegeben wird, in denen der Bash-Standard abweicht.
Bei Aufruf als sh
, Bash wechselt in den POSIX-Modus, nachdem die
Startdateien gelesen wurden.