Hanya mencakup 1) pertanyaan Anda.
Secara alami API selalu dapat berubah atas kehendak pencipta mereka, dan dengan demikian menghancurkan perangkat lunak yang tergantung, dalam bahasa apa pun. Yang mengatakan, ide bagus dari alat Unix ' I / O "API" adalah bahwa praktis tidak ada (mungkin 0x0a
sebagai akhir baris). Skrip yang baik memfilter data dengan alat Unix alih-alih membuatnya. Itu berarti bahwa skrip Anda dapat rusak karena input atau spek output berubah, tetapi bukan karena format I / O (sekali lagi, sebenarnya tidak ada satu) dari alat individu yang digunakan dalam skrip berubah (karena sesuatu yang tidak benar-benar ada tidak bisa benar - benar berubah).
Akan melalui daftar alat dasar ada beberapa yang saya juga atribut produsen , sebagai lawan hanya filter:
- wc - mencetak jumlah byte, kata, garis - format yang sangat sederhana, sehingga sama sekali tidak mungkin untuk berubah, dan lebih jauh lagi sangat tidak mungkin untuk digunakan dalam naskah.
- diff - ada telah berevolusi format output yang berbeda tetapi saya belum pernah mendengar masalah. Juga biasanya tidak digunakan tanpa pengawasan.
- date - Sekarang di sini kita benar-benar harus memperhatikan apa yang kita hasilkan, terutama mengenai sistem lokal. Tetapi sebaliknya format output adalah RFC'ed mengingat Anda tidak menentukannya sendiri.
- cal - jangan bicara tentang itu, saya tahu bahwa format output memang sangat berbeda di seluruh sistem.
- ls , yang , w , lalu - saya tidak bisa membantu jika Anda ingin mengurai ls, hal itu tidak dimaksudkan untuk menjadi. Juga, siapa, yang terakhir adalah pendengar yang lebih interaktif; Jika Anda menggunakannya dalam skrip, Anda harus berhati-hati dengan apa yang Anda lakukan.
- waktu ditunjukkan di pos lain. Tapi ya, sama dengan ls. Lebih banyak untuk penggunaan interaktif / lokal. Dan bash builtin sangat berbeda dari versi GNU, dan versi GNU telah memiliki bug yang tidak diperbaiki selama bertahun-tahun. Hanya saja, jangan mengandalkan itu.
Berikut adalah alat yang mengharapkan format input tertentu lebih spesifik daripada menjadi aliran byte:
- bc , dc - kalkulator. Sudah di sisi yang lebih hackish (sungguh, saya tidak menggunakannya dalam skrip), dan mungkin format I / O sangat stabil.
Ada area lain dengan risiko kerusakan yang jauh lebih tinggi, yaitu antarmuka baris perintah. Sebagian besar alat memiliki fitur yang berbeda baik lintas sistem maupun lintas waktu. Contohnya adalah
- Semua alat yang menggunakan regex - regex dapat mengubah makna berdasarkan sistem lokal (misalnya LC_COLLATE) dan ada banyak seluk-beluk dan kekhususan di seluruh implementasi regex.
- Cukup tidak menggunakan switch mewah. Anda dapat dengan mudah menggunakan
man 1p find
misalnya, untuk membaca manual menemukan POSIX alih-alih halaman manual sistem. Di sistem saya, saya perlu menginstal manpages-posix.
Dan bahkan ketika menggunakan switch seperti itu, biasanya ada kesalahan tidak akan secara halus diperkenalkan dan meracuni data Anda. Sebagian besar program hanya akan menolak untuk bekerja dengan saklar yang tidak dikenal.
Untuk menyimpulkan, saya akan mengatakan bahwa shell sebenarnya berpotensi menjadi salah satu bahasa yang paling portabel (ini portabel ketika Anda skrip portabel). Bandingkan dengan bahasa skrip favorit Anda di mana kesalahan halus terjadi, atau program kompilasi favorit Anda yang akan diserahkan untuk dikompilasi.
Selain itu, di tempat-tempat langka di mana kerusakan dapat terjadi karena ketidakcocokan, mungkin bukan karena waktu yang disebabkan, tetapi karena keragaman di berbagai sistem (artinya jika itu bekerja untuk Anda, itu terjadi 20 tahun sebelum dan akan dalam 20 tahun juga). Itu adalah akibat wajar dari kesederhanaan alat '.