Apakah skrip dasbor, abu, dan sh 100% kompatibel?

16

Saya ingin tahu apakah skrip yang ditulis untuk dash, ash, dan sh 100% kompatibel?

Apakah ada fitur tambahan untuk dasbor atau abu, atau perubahan sintaks?

Dari apa yang saya dengar, abu adalah keturunan langsung sh.

pengguna1115057
sumber
ash adalah bentuk bash bergaris
Joe
4
Sumber? Saya tidak melihat apa pun yang mengatakan bahwa abu terkait dengan bash
user1115057
Mengapa tidak ada orang yang mengirimkan tambalan ke bash alih-alih membuat semua jenis kerang, yang membuat saya bingung setiap saat. Jika Anda benar-benar ingin tahu, bacalah manualnya, mis.man ash
daisy
2
Benar, itu bukan keturunan dari bash. Akan lebih tepat untuk mengatakan bahwa mereka adalah keturunan dari sh (shell Bourne asli), tetapi itu juga tidak sepenuhnya benar.
Zlatko
Anda dapat menggunakan utilitas checkbashismsuntuk menguji apakah skrip Anda kompatibel dengan POSIX.
Donasi berhasil

Jawaban:

18

Jawaban singkatnya adalah tidak, mereka tidak 100% kompatibel.

Tetapi sebagian besar cangkang cukup dekat dengan dasar, sehingga Anda hanya akan jarang menemui ketidakkonsistenan. Bahkan, sebagian besar shell tidak berbeda jauh dengan menambahkan sintaks, tetapi oleh beberapa fitur tambahan seperti tab-completion dan sejenisnya.

Juga, dashsemacam turunan ash- atau port dari BSD ke Linux, tepatnya. Dan semuanya harus keturunan atau implementasi yang berbeda sh. Bahkan, shpada sebagian besar sistem hanya symlink bash, dashatau sesuatu yang lain. Yang penting adalah kepatuhan POSIX - dan ketika Anda menulis skrip sesuai dengan standar, Anda tidak akan mengalami masalah.

Perbedaan antara cangkang itu adalah dalam optimasi dan kinerja. Mereka kurang kaya fitur bash, tetapi mereka sepenuhnya shell yang sah. Bash kaya fitur untuk pekerjaan interaktif, tetapi menggunakan lebih banyak memori, misalnya.

Zlatko
sumber
Tetapi untuk penggunaan skrip, apakah itu kompatibel?
user1115057
Dan tentang kepatuhan POSIX, bahkan jika saya mengikuti standar itu, jika sebuah skrip ditulis untuk Bash, saya tidak berpikir itu akan berjalan pada sembarang sh atau turunannya
user1115057
Mereka harus kompatibel satu sama lain jika Anda tidak menggunakan beberapa fitur yang tidak jelas. Tetapi jika Anda menggunakan skrip bash, Anda mungkin mengalami lebih banyak masalah.
Zlatko
tidak pernah bermaksud menggunakan bash dengan sh atau ash atau dash. Apa saja fitur yang tidak jelas itu?
user1115057
1
banyak fitur bash yang lebih baru adalah penambahan lebih dari POSIX, sehingga semakin besar kemungkinan Anda akan menulis kode yang tidak dapat diakses jika Anda menggunakannya. IIRC bahkan konstruk [[]] tidak ada di sh. Juga berhati-hatilah, bahwa jika Anda tidak membuat skrip shell murni, perbedaan dalam alat juga ikut bermain (versi berbeda dari sed, grep, awk ...).
lynxlynxlynx
1

Harus disebutkan bahwa pada beberapa sistem, terutama Debian, / bin / ash tidak tersedia:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash
Steven Penny
sumber
2
Mereka mungkin memiliki busybox ash.
muru