TL;DR - gunakan bash hanya untuk menginstal bahasa yang lebih baik (jika belum tersedia), jika tidak, Anda membuang-buang waktu manusia yang berharga dan tidak dapat dipulihkan. Jika Anda tidak dapat melakukannya di baris perintah secara manual tanpa kesalahan, jangan membuat skrip dengan bash/shell.
Ini tahun 2015, jadi saya akan mempertimbangkan hal berikut:
-
overhead memori
- Operhead memori runtime Ruby/Python dibandingkan dengan bash sangat kecil (karena perpustakaan bersama), sementara seseorang mungkin tidak dapat mempertahankan skrip bash non-sepele (yaitu skrip dengan> 100 baris) - jadi penggunaan memori bukan faktor
-
waktu mulai
- Startup Ruby/Python mungkin sedikit lebih lambat, tetapi kemungkinan Anda tidak akan menjalankan banyak proses Ruby/Python penuh dalam loop ketat 100 kali per detik (jika Anda memiliki kebutuhan seperti itu, bash /shell terlalu banyak overhead dan Anda mungkin harus beralih ke C/C++)
-
kinerja
- hampir semua pemrosesan data pada umumnya akan lebih cepat di Ruby/Python - atau setidaknya sebanding (atau, Anda memerlukan C/C++/Haskel/OCaml/apa pun itu)
- kinerja nyata/bottleneck dalam eksekusi (atau bahkan produktivitas) hampir tidak akan pernah menjadi "kurangnya penggunaan bash/shell" (bahkan tanda hubung peralihan Ubuntu untuk startup menunjukkan bagaimana bash sebenarnya masalahnya - dan busybox mungkin satu-satunya kasus penggunaan, karena ada adalah tidak lebih dari 'bash' dan 'vi' untuk menulis dan menjalankan kode, dan seringkali tidak ada cara untuk menambah/mengunduh atau menyimpan yang lain)
- menjalankan proses lain untuk melakukan pekerjaan (seperti sed/awk/grep) sebenarnya jauh lebih lambat daripada memanggil metode pada objek langsung di memori
-
produktivitas
- terlalu mudah membuat kesalahan di Bash/Shell dibandingkan dengan menggunakan metode, parameter, variabel, dan pengecualian "nyata" di Ruby/Python
- Agile adalah arus utama, sementara Bash tidak mendukungnya (kurang dalam kemampuan pengujian unit, perpustakaan, OO, modularitas, linting, introspeksi, logging, metaprograming; hampir tidak mungkin untuk melakukan refactor tanpa merusak sesuatu)
- terlalu banyak ketidakcocokan dengan shell lain, variabel lingkungan minor dapat sepenuhnya merusak skrip (dan beberapa alat dev-ops penting seperti Puppet mengabaikan garis shebang dan meneruskan atau menulis ulang variabel shell penting), sementara Ruby/Python memiliki definisi yang baik jalur migrasi yang relatif lancar bahkan untuk perubahan versi besar
- mempelajari bahasa baru membutuhkan waktu yang lebih singkat daripada menghabiskan skrip shell debugging karena masalah khusus shell (terutama - nama variabel, tanpa boolean, tanpa pengecualian, dll.)
- bahkan skrip startup adalah ranjau darat (terutama karena dapat gagal selama sistem startup), dan mengingat kelemahan keamanan baru-baru ini dengan bash, Anda mungkin lebih baik menggunakan C biasa (dengan pustaka yang bagus) - ya, C perlu dikompilasi, dikonfigurasi, dll., tetapi bahkan skrip shell sederhana mungkin memerlukan repositori, lalu membuat versi , lalu tetap bungkus.
- apa pun yang tersedia dengan sed/awk/grep kemungkinan sudah ada di dalam Ruby/Python - tanpa ketergantungan, atau "perbedaan" antara versi alat tersebut di seluruh platform (jadi bagaimana jika itu bekerja pada Anda penyiapan)
- keamanan pekerjaan
- apa gunanya mengamankan pekerjaan yang tidak Anda sukai? (kecuali jika Anda suka menghabiskan waktu berjam-jam untuk membuat bug skrip shell yang sulit di-debug tetapi tidak penting)
Saya menemukan tidak ada alasan untuk menggunakan Bash/Shell jika Anda menginstal Ruby/Python.
Dan mungkin menginstal Ruby/Python bahkan tidak memerlukan skrip bash sejak awal (dengan pengecualian busybox, beberapa alat sistem tetap bergantung pada kehadiran Python/Perl).
Dan setiap kali Anda menulis skrip shell, Anda "berlatih" melakukan persis seperti itu - alih-alih mempelajari sesuatu yang lebih canggih/produktif.
Mengapa orang menggunakan Bash saat ini? Karena itu kebiasaan yang buruk dan sulit dihilangkan. Sebuah skrip jarang "selesai selamanya" setelah beberapa menit pertama - tidak peduli seberapa kuat orang cenderung berpikir seperti itu. Bersamaan dengan kekeliruan "itu bug terakhir dalam skrip ini".
Kesimpulan:gunakan bash/shell hanya jika Anda benar-benar terpaksa ke (seperti ~/.bashrc
, busybox), karena hampir tidak pernah "alat yang tepat untuk pekerjaan" saat ini.
Mengingat masalah yang bisa ditangani keduanya, Anda pasti ingin menggunakan yang paling nyaman bagi Anda. Pada akhirnya, ada banyak detail kecil, dan hanya pengalaman yang dapat mengajari Anda untuk melihatnya.
Bash adalah bahasa skrip tujuan umum seperti Python, Ruby, Perl, tetapi masing-masing memiliki kekuatan yang berbeda dari yang lain. Perl unggul dalam analisis teks, Python mengklaim sebagai yang paling elegan, skrip Bash sangat bagus dalam "menyalurkan barang", jika Anda tahu apa yang saya maksud, dan Ruby ... well, Ruby sedikit spesial dalam banyak hal cara.
Namun, perbedaan di antara mereka hanya benar-benar penting setelah Anda memiliki pengalaman menulis skrip yang cukup. Saya sarankan Anda memilih satu bahasa dan mendorongnya hingga batasnya sebelum pindah ke bahasa berikutnya. Anda dapat melakukan banyak hal dalam skrip shell, lebih dari yang diakui kebanyakan orang. Bahasa apa pun sesulit yang Anda inginkan. Setelah Anda menulis beberapa hal di dalamnya, setiap bahasa "mudah" bagi Anda.
Mengenal shell terbayar dengan cepat jika Anda tinggal di Linux, jadi mungkin Anda ingin memulainya. Jika Anda menemukan tugas yang tidak mungkin atau tidak praktis untuk diselesaikan dalam skrip shell, gunakan yang lain.
Juga, ingatlah bahwa mempelajari skrip shell sangat sederhana. Kekuatan sebenarnya terletak pada program lain, seperti awk, sed, tr, et al.
Saya menggunakan bash ketika fokus utama saya adalah penanganan file. Ini bisa termasuk memindahkan, menyalin, dan mengganti nama file, serta menggunakan file sebagai input untuk program lain atau menyimpan output program lain dalam file. Saya jarang menulis kode bash yang benar-benar memeriksa isi file atau menghasilkan keluaran untuk menulis ke file; Saya serahkan itu ke program lain (yang mungkin saya tulis di Perl atau python) yang saya luncurkan melalui bash.
Saya menggunakan Perl dan python ketika fokus utama saya adalah membaca data dari file, memproses data tersebut dengan cara tertentu, dan menulis output ke file. Jika saya menemukan diri saya menggunakan (dalam Perl) system
perintah, back ticks atau (dengan python) subprocess
modul terlalu luas, saya menganggap menulis skrip di bash. Di sisi lain, saya kadang-kadang mulai menambahkan begitu banyak fungsionalitas ke skrip bash yang pada akhirnya lebih masuk akal untuk menulis ulang di Perl/python daripada berurusan dengan dukungan bash yang terbatas (sebagai perbandingan) untuk pelingkupan variabel, fungsi, struktur data, dll .