Mempertimbangkan bahwa POSIX adalah hal yang paling dekat dengan standar umum di antara semua kesatuan, saya tertarik mengetahui apakah ada shell yang mendukungnya secara eksklusif. Sementara sebagian besar shell modern menyediakan dukungan untuk POSIX (dan akan menjalankan skrip yang sesuai dengan POSIX tanpa masalah), mereka tidak melakukan pekerjaan yang baik untuk menunjukkan fitur-fitur yang tidak sesuai.
Apakah ada shell yang mengimplementasikan POSIX dan POSIX saja, sedemikian rupa sehingga akan menimbulkan kesalahan untuk fitur yang tidak sesuai?
EDIT Saya ingin mengklarifikasi bahwa saya tidak meminta tips umum untuk menulis skrip shell portabel. Pertanyaan terkait yang disebutkan dalam komentar sudah mencakup ini. Saya memikirkan pertanyaan ini ketika saya menemukan bahwa bash
ada --posix
pilihan tetapi hanya untuk menemukan bahwa itu hanya mempengaruhi beberapa perilaku intimisasi yang tidak persis apa yang saya cari.
sumber
dash
. Saya menyebutkan portabilitas sebagai konteks umum untuk pertanyaan saya, tetapi itu bukan maksud sebenarnya.Jawaban:
Sayangnya, 'portable' biasanya persyaratan yang lebih kuat daripada 'POSIX-compliant' untuk skrip shell. Yaitu, menulis sesuatu yang berjalan pada shell POSIX tidak terlalu sulit, tetapi membuatnya berjalan pada shell dunia nyata lebih sulit.
Anda dapat mulai dengan memasang setiap shell di manajer paket Anda, khususnya debian yang
posh
terdengar seperti yang Anda inginkan (Shell Biasa yang Sesuai Kebijakan). Kebijakan Debian adalah POSIX dengan beberapa pengecualian (echo -n
ditentukan,local
...).Selain itu, pengujian harus mencakup beberapa shell (/ bin / sh khususnya) pada berbagai platform. Saya menguji pada Solaris (/ bin / sh dan xpg4 / sh), dan BSD. AIX dan HP-UX sangat patuh dan tidak menyebabkan masalah. bash adalah dunianya sendiri.
Saya akan merekomendasikan panduan Autoconf untuk shell portabel , yang benar-benar brilian dan menghemat banyak waktu. Potongan besar itu sudah usang, tapi tidak apa-apa; lewati saja TruUnix dan Ultrix dan seterusnya jika Anda tidak peduli!
sumber
posh
memang terdengar seperti apa yang saya minta. Saya akan melakukan beberapa tes secepat mungkin.Anda dapat menggunakan ShellCheck (GitHub) sebagai linter untuk skrip shell Anda. Ada juga versi online .
Untuk mendeteksi masalah kompatibilitas POSIX (mis. SC2039 ), baris shebang dari skrip shell Anda seharusnya
#!/bin/sh
. Anda juga bisa lewat--shell=sh
keshellcheck
.Contoh (
test.sh
):Hasil (
shellcheck test.sh
):sumber
Bash akan berjalan dalam mode yang sesuai dengan POSIX jika
POSIXLY_CORRECT
variabel lingkungan diatur. Dari halaman manual:Banyak utilitas GNU lain juga akan dihormati
POSIXLY_CORRECT
, jadi jika Anda menggunakan sistem dengan alat-alat GNU yang dominan (misalnya kebanyakan sistem Linux), ini adalah awal yang baik jika tujuan Anda adalah kesesuaian POSIX.sumber
[[
.