Bisakah seseorang meletakkan alat-alat ini agar mudah dibawa? Manakah dari ini yang pasti dapat ditemukan pada sistem * nix yang paling minimal sekalipun? Apakah ada di antara mereka yang 100% yakin untuk hadir? Dugaan saya adalah bahwa urutannya adalah sebagai berikut:
- awk
- sed
- SH
- perl
Sementara saya membayangkan ada sistem yang tidak default ke shell bourne, beberapa shell akan hadir sebagai default, apakah itu akan selalu di /bin/sh
? Mungkin tidak jika itu bukan shell tipe-bourne. Keduanya awk
dan sed
memiliki halaman yang menjelaskannya pada spesifikasi POSIX sehingga mungkin mereka akan selalu ada. Apakah begitu? Dapatkah saya yakin bahwa keduanya akan diinstal pada * nix? Termasuk sistem tertanam?
posix
portability
terdon
sumber
sumber
sh
,awk
dansed
misalnya dan NAS berbasis busybox saya juga memiliki perl.Jawaban:
sed
,sh
danawk
portabel yang ditentukan oleh POSIX,perl
tidak didukung oleh standar.Jika Anda tetap menggunakan kode yang sesuai, seharusnya tidak ada urutan portabilitas untuk tiga perintah POSIX.
Tiga yang POSIX bersama dengan banyak utilitas lain wajib untuk OS menjadi POSIX. OS kekurangan beberapa dari mereka karena minimisasi, atau menyediakan implementasi yang tidak lengkap / tidak sesuai memang ada.
Sebenarnya, sebagian besar (jika tidak semua) Unix sumber bebas dan terbuka seperti sistem operasi mungkin tidak akan melewati proses penyesuaian jika mereka mencoba, dan mereka tidak pernah mencoba lagi.
Saya akan terkejut menemukan * nix seperti OS yang tidak memiliki shell berdasarkan sintaks Bourne, tetapi segala sesuatu mungkin terjadi, terutama dengan sistem embedded.
/bin/sh
kemungkinan merupakan shell keluarga sintaks Bourne tetapi tidak dijamin sesuai dengan POSIX, bahkan dengan sistem yang sesuai dengan POSIX. Sebagai contoh, ini ada/usr/xpg4/bin/sh
pada Solaris 10 dan yang lebih tua sementara itu/bin/sh
adalah shell Bourne asli yang bukan POSIX.sumber
Ambil petunjuk dari Autotools: tetap pada penyebut umum terendah dari Bourne dan POSIX shell - mungkin ditambah oleh
sed
- jika Anda harus menulis sesuatu yang harus bekerja di mana-mana . Mungkin ada sistem di mana sesuatu rusak, tetapi Anda dapat mengatasi masalah tersebut dengan menulis ulang.Sebagai contoh, beberapa sistem kuno memiliki masalah dengan kesalahan ekspansi
test
, alias[
:jadi praktik Autoconf adalah menulis ulang dalam tanda kutip ganda dengan awalan satu karakter, seperti:
Anda juga bisa menggunakannya di
"x$foo"
sini. Penjaga ini terhadap kemungkinan yang$foo
bisa menjadi opsi yang valid untuktest(1)
, dan karena[
merupakan alias untuktest
, itu bisa salah menafsirkan ekspresi. Solusinya adalah mengatur situasi di mana argumen yang tidak diketahui[
selalu dimulaix
, yang artinya tidak dapat memiliki makna khusus[
.(Autoconf juga merekomendasikan penggunaan
test
daripada[
, tetapi saran itu muncul sebagai reaksi terhadap kemungkinan konflik dengan M4 , yang juga digunakan[
dalam sintaksisnya.)awk adalah POSIX , jadi secara teoritis itu tersedia di mana-mana. Bahkan di Busybox , jadi Anda akan memiliki
awk
implementasi bahkan di beberapa sistem Linux tertanam yang sangat ketat. Namun, saya akan kurang terkejut menemukan sistem tanpaawk
dibandingkansed
. Saya kira itu datang ke kompleksitas: alat sederhana lebih mungkin untuk bertahan hidup triase agresif.Perl bukan bagian dari standar yang tersebar luas, POSIX atau yang lainnya, jadi Anda tidak dapat mengandalkannya jika Anda tidak mengetahui sebelumnya tentang lingkungan target. Perl tidak diinstal secara default di:
Manual Autoconf memiliki bab tentang pemrograman shell portabel yang seharusnya membantu Anda. Alat bagian terakhir selimut seperti
sed
,awk
, dan banyak lainnya.sumber
sh
dansed
merupakan yang paling portabel. OK, bagaimana dengan yang lain? Dansh
benarkah itu portabel? Bagaimana jika shell default adalah turunan C-shell? Apakah sistem seperti itu masih memiliki symlink/bin/sh
?sed
danawk
disediakan oleh busybox, mengapa Anda lebih terkejut menemukansed
ketidakhadiran? Apakah Anda tahu jika busybox alternatif juga menyediakan sed dan awk?sed
tidak lebih sedikit, jadi binernya akan lebih kecil, maka ada lebih sedikit alasan untuk menghapusnya daripadaawk
, yang cukup rumit. (20 kiB vs 48 kiB di sistem saya.) Re: Alternatif Busybox , saya tidak mengetahui adanya alternatif one-stop-shopping lainnya.sh
- aneh bahwa jajaran Terdonawk
dansed
? Atas o_O ini) meskipun ini hanya kebetulan dengan tujuan Autotool, karena beberapa lingkungan, terutama yang kecil, mungkin tidak dimaksudkan untuk bangunan, titik./bin/sh
, maka semuanya berbeda tetapi saya tidak tahu bahwa semua akan memilikinya. Maaf karena tidak menerima ini, saya terpecah antara jawaban Anda dan jlliagre yang keduanya menjawab pertanyaan saya. Saya memilih nya karena itu mengatasinya lebih langsung dan karena dia kurang perwakilan :).