Menghindari "BASH-isme" dalam skrip shell

37

Apakah ada alat yang mirip dengan Perl :: Critic yang akan memeriksa skrip shell Anda dan menunjukkan kekurangan, masalah portabilitas, penggunaan program non-standar tanpa cadangan, penggunaan program yang disusutkan, dll?

Saya menyadari bahwa set -o posixakan menonaktifkan penggunaan non-POSIX, tetapi itu tidak akan memberi tahu saya hal-hal yang ingin saya ketahui, seperti zsh indexing array array mulai dari 1, dan bash, mulai 0, dan ash tidak mendukung array sama sekali.

amphetamachine
sumber

Jawaban:

36

Ada checkbashisms . Di Debian, itu dikirim sebagai bagian dari alat pengelola paket .

Uji skrip Anda di bawah tanda hubung dan posh . Keduanya memiliki beberapa konstruksi non-POSIX, tetapi jika skrip Anda berfungsi di keduanya, itu mungkin berfungsi di sebagian besar tempat. (Dengan peringatan bahwa sulit untuk menguji skrip shell khas karena mereka cenderung memiliki banyak kasus sudut.)

Jika Anda bermaksud agar skrip Anda portabel untuk platform Linux yang tertanam, ujilah dengan BusyBox . Perhatikan bahwa BusyBox dapat lebih atau kurang dibatasi, tergantung pada seberapa kecil sistem embedded yang Anda inginkan; cukup normal untuk memiliki skrip yang bergantung pada fitur yang tidak dimiliki beberapa instalasi BusyBox.

Perhatikan bahwa non-portabilitas tidak hanya berasal dari shell, tetapi juga dari utilitas eksternal. OpenBSD dan Solaris cenderung memiliki utilitas dengan fitur POSIX dan tidak lebih, sehingga mereka baik untuk pengujian portabilitas.

Anda ingin merujuk ke spesifikasi POSIX , dan sumber daya lain yang disebutkan dalam utas ini (terutama manual autoconf ); tapi itu dokumentasi, itu tidak membantu jika Anda menggunakan fitur secara tidak sengaja.

Gilles 'SANGAT berhenti menjadi jahat'
sumber