Penso di aver configurato bash come shell, ma perché sta succedendo?
La mia shell è bash:
# ls -al `which sh`
lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash
Errore durante l'esecuzione di uno script con sh
# sh ubuntu/util.sh
ubuntu/util.sh: line 32: `test-build-release': not a valid identifier
Nessun errore da bash
# bash ubuntu/util.sh
Risposta accettata:
Sta eseguendo l'eseguibile bash che ti aspetti, ma la tua shell non è semplicemente bash; è bash in esecuzione in POSIX sh
modalità di compatibilità. Lo fa guardando il nome del comando con cui è stato invocato e se è sh
, quindi attiva automaticamente la modalità POSIX. Fa un lavoro davvero terribile e non dovrebbe essere completamente utilizzato per testare POSIX sh
script compatibili, ma dovrebbe limitare notevolmente la sintassi consentita.
–posix
Modificare il comportamento di bash in cui l'operazione predefinita differisce dallo standard POSIX in modo che corrisponda allo standard (modalità posix).
Vedere ANCHE di seguito per un riferimento a un documento che descrive in dettaglio come la modalità posix influisce sul comportamento di bash.
E da http://tiswww.case.edu/php/chet/bash/POSIX :
Avvio di Bash con --posix
opzione della riga di comando o eseguendo set
mentre Bash è in esecuzione farà sì che Bash si conformi più strettamente allo standard POSIX modificando il comportamento in modo che corrisponda a quello
-o posix
specificato da POSIX nelle aree in cui l'impostazione predefinita di Bash differisce.
Quando viene invocato come sh
, Bash entra in modalità POSIX dopo aver letto i file di avvio
.