Myslím, že jsem bash nakonfiguroval jako shell, ale proč se to děje?
Můj shell je bash:
# ls -al `which sh`
lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash
Chyba při provádění skriptu pomocí sh
# sh ubuntu/util.sh
ubuntu/util.sh: line 32: `test-build-release': not a valid identifier
Žádná chyba z bash
# bash ubuntu/util.sh
Přijatá odpověď:
Spouští spustitelný soubor bash, který očekáváte, ale váš shell není jen bash; běží bash v POSIX sh
Režim kompatibility. Dělá to tak, že se podívá na název příkazu, který byl vyvolán, a pokud je to sh
, poté automaticky aktivuje režim POSIX. V tomto dělá velmi strašnou práci a nemělo by se na něj plně spoléhat při testování POSIX sh
kompatibilní skripty, ale měl by značně omezit povolenou syntaxi.
–posix
Změňte chování bash tam, kde se výchozí operace liší od standardu POSIX, aby odpovídala standardu (režim posix).
VIZ TAKÉ níže naleznete odkaz na dokument, který podrobně popisuje, jak režim posix ovlivňuje chování bash.
A z http://tiswww.case.edu/php/chet/bash/POSIX:
Spuštění Bash pomocí
--posix
možnost příkazového řádku nebo provedeníset
zatímco Bash běží, způsobí, že Bash bude více odpovídat standardu POSIX tím, že změní chování tak, aby odpovídalo
-o posix
specifikovanému POSIX v oblastech, kde se výchozí Bash liší.Při vyvolání jako
sh
, Bash vstoupí do režimu POSIX po načtení spouštěcích
souborů.