Perilaku itu tampaknya konsisten di antara semua kerang POSIX. Saya tidak melihat perlunya ruang gerak di sini.
Anda tidak melihat cukup dalam.
Kembali pada 1980-an, mekanisme ini tidak standar de facto. Meskipun Dennis Ritchie telah mengimplementasikannya, implementasi itu belum mencapai publik di sisi AT&T alam semesta. Secara efektif hanya tersedia untuk umum dan dikenal di BSD; dengan skrip shell yang dapat dieksekusi tidak tersedia di AT&T Unix. Jadi tidak masuk akal untuk membakukannya. Keadaan hubungan dicontohkan oleh dokumen kontemporer ini, salah satu dari banyak seperti:
Perhatikan bahwa BSD memungkinkan file yang dimulai dengan #! interpreter
dieksekusi secara langsung, sedangkan SysV hanya mengizinkan file a.out untuk dieksekusi secara langsung. Ini berarti bahwa instance dari salah satu exec…()
rutin dalam program BSD mungkin harus diubah di bawah SysV untuk menjalankan penerjemah (secara typlic /bin/sh
) untuk program itu.
- Stephen Frede (1988). "Pemrograman pada Sistem X Rilis Y". Newsletter Kelompok Pengguna Australian Unix Systems . Volume 9. Nomor 4. p. 111.
Poin penting di sini adalah bahwa Anda melihat shell, sedangkan keberadaan skrip shell yang dapat dieksekusi sebenarnya adalah masalah exec…()
fungsi. Apa yang dilakukan oleh shell termasuk prekursor dari mekanisme skrip yang dapat dieksekusi, masih dapat ditemukan di beberapa shell bahkan hari ini (dan juga saat ini diamanatkan untuk exec…p()
subset fungsi), dan agak menyesatkan. Apa yang perlu diperhatikan oleh standar dalam hal ini adalah bagaimana exec…()
pada skrip yang diinterpretasikan bekerja, dan pada saat POSIX awalnya dibuat, ia sama sekali tidak bekerja di tempat pertama di seluruh bagian utama dari spektrum sistem operasi target .
Pertanyaan bawahan adalah mengapa hal ini belum distandarisasi sejak saat itu, terutama karena mekanisme angka ajaib untuk penerjemah skrip telah mencapai publik di sisi AT&T alam semesta dan telah didokumentasikan exec…()
dalam System 5 Interface Definition , pada pergantian tahun 1990-an. :
File juru bahasa dimulai dengan satu baris formulir#! pathname [arg]
di mana pathname adalah path dari interpreter, dan arg adalah argumen opsional. Ketika Anda exec
file juru bahasa, sistem exec
adalah juru bahasa yang ditentukan.
- exec
. Sistem V Interface Definition . Volume 1. 1991.
Sayangnya, tingkah laku ini masih berbeda hingga hampir sama dengan tahun 1980-an dan tidak ada perilaku yang benar-benar umum untuk dibakukan. Beberapa Unices (misalnya HP-UX dan FreeBSD, misalnya) tidak mendukung skrip sebagai penerjemah skrip. Apakah baris pertama adalah satu, dua, atau banyak elemen yang dipisahkan oleh spasi putih bervariasi antara MacOS (dan versi FreeBSD sebelum 2005) dan lainnya. Panjang jalur maksimum yang didukung bervariasi. ␀
dan karakter melebihi set karakter nama file portabel POSIX yang rumit, seperti halnya memimpin dan mengikuti spasi putih. Apa argumen 0, 1, dan 2 akhirnya juga rumit, dengan variasi yang signifikan di seluruh sistem. Beberapa saat ini POSIX-conformant tetapi nonSistem -Unix masih tidak mendukung mekanisme seperti itu, dan mengamanatkan itu akan mengubahnya menjadi tidak lagi sesuai POSIX.
Bacaan lebih lanjut