Saya pikir saya telah mengonfigurasi bash sebagai shell, tetapi mengapa ini terjadi?
Shell saya bash:
# ls -al `which sh`
lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash
Terjadi kesalahan saat menjalankan skrip dengan sh
# sh ubuntu/util.sh
ubuntu/util.sh: line 32: `test-build-release': not a valid identifier
Tidak ada kesalahan dari bash
# bash ubuntu/util.sh
Jawaban yang Diterima:
Itu menjalankan bash yang dapat dieksekusi yang Anda harapkan, tetapi Shell Anda bukan hanya bash; itu bash berjalan di POSIX sh
modus kompatibilitas. Ini dilakukan dengan melihat nama perintah yang dipanggil, dan jika itu sh
, kemudian secara otomatis mengaktifkan mode POSIX. Ini melakukan pekerjaan yang sangat buruk dalam hal ini, dan tidak boleh sepenuhnya diandalkan untuk menguji POSIX sh
skrip yang kompatibel, tetapi harus sangat membatasi sintaks yang diizinkan.
–posix
Ubah perilaku bash di mana operasi default berbeda dari standar POSIX agar sesuai dengan standar (mode posix).
Lihat LIHAT JUGA di bawah untuk referensi ke dokumen yang merinci bagaimana mode posix memengaruhi perilaku bash.
Dan dari http://tiswww.case.edu/php/chet/bash/POSIX :
Memulai Bash dengan
--posix
opsi baris perintah atau menjalankanset
saat Bash berjalan akan menyebabkan Bash menyesuaikan lebih dekat dengan standar POSIX dengan mengubah perilaku agar sesuai dengan
-o posix
yang ditentukan oleh POSIX di area di mana default Bash berbeda.Saat dipanggil sebagai
sh
, Bash memasuki mode POSIX setelah membaca file
startup.