Apa yang tidak spesifik dengan shell?

9

Di bawah beberapa jawaban, saya melihat komentar yang merekomendasikan menghindari perintah spesifik shell dalam jawaban.

Bagaimana saya tahu perintah, operator, dll yang ada di semua shell? Apakah ada daftar standar?

  • man builtinsmemberikan daftar perintah. Apakah itu satu-satunya perintah yang bisa saya gunakan dalam skrip shell portabel yang berfungsi di semua shell?
  • Bisakah built-in khusus untuk shell?
  • Apakah standar untuk Linux berbeda dari standar Unix lainnya?
  • Bagaimana dengan sintaks? Bisakah tanda baca, operator, dll berbeda di beberapa shell?
musa
sumber

Jawaban:

12

Greg's Wiki memiliki posting tentang mengadaptasi skrip bash untuk Dash yang menunjukkan banyak 'bashism' - fitur tambahan yang tidak standar tetapi merupakan bagian dari bash. Menghindari bashisme tersebut dapat membantu membuat skrip Anda lebih ramah untuk lingkungan yang berbeda. Ini khususnya menjawab beberapa pertanyaan Anda. Sebagai contoh, ya, ada operator yang berbeda (seperti ==), tetapi ada satu set Posix standar yang harus bekerja di semua lingkungan.

Untuk bacaan yang lebih teliti, Anda dapat memeriksa standar Posix , yang harus dipatuhi oleh semua cangkang. Khususnya, volume pada "Shell & Utilities".

Apa yang saya temukan lebih menantang daripada perbedaan shell adalah perbedaan perintah. Banyak sistem Linux memiliki GNU find, tetapi jika Anda menulis skrip portabel, jangan bergantung pada Anda sendiri man find, karena ada banyak sistem di luar sana dengan BSD find, yang memiliki serangkaian fitur berbeda. Jika Anda menulis skrip untuk busybox, Anda akan menemukan ada beberapa versi dengan ncs yang sama sekali berbeda . Itulah hal-hal yang selalu membuat saya ketika saya menggunakan skrip ke lingkungan yang berbeda.

Untuk membaca lebih lanjut tentang praktik skrip shell yang baik, ada juga sumber yang bagus di blog David Pashley: Menulis Skrip Bash Shell yang Kuat

Juga, pastikan Anda membaca jawaban dan komentar Gilles di situs ini. Dia memiliki banyak tips untuk memastikan Anda menggunakan kode portabel.

Shawn J. Goff
sumber
5

Menulis skrip shell dalam shell tertentu berarti menginstal shell itu. Satu-satunya standar adalah memiliki cshdan shmenginstal semua varian Unix. Jadi, jika Anda ingin skrip Anda dijalankan pada Solaris, * BSD, dan GNU maka Anda harus menuliskannya, katakanlah, shell Bourne.

Namun, sebagian besar perintah Unix memiliki sintaks yang berbeda di bawah implementasi yang berbeda - lihat di psbawah Solaris, FreeBSD, dan GNU - jadi tergantung pada alat apa yang Anda gunakan, skrip Anda mungkin tidak portabel. Di mana shell diinstal akan penting juga. Apakah itu /bin/bash /usr/bin/bash,, /usr/local/bin/bashatau di tempat lain?

Saya tidak mengetahui standar apa pun yang mendefinisikan shell. Lihatlah rc atau http://192.220.96.201/es/es-usenix-winter93.html`"> untuk kerang non-standar yang aneh. Namun, yang tampaknya masih sesuai dengan beberapa ide umum.

Sardathrion - menentang penyalahgunaan SE
sumber
7
POSIX mendefinisikan sh.
Random832