Saya menulis skrip shell dengan beberapa variabel yang harus dikonfigurasi oleh pengguna. Akan ada penginstal untuk mengunduh dan mengonfigurasi skrip, mungkin dengan mengajukan serangkaian pertanyaan. Skrip yang dimaksud ditujukan untuk pengembang lain.
Ini dapat diimplementasikan dalam beberapa cara:
Gunakan placeholder dalam skrip itu sendiri dan gunakan
sed
untuk menggantikan mereka selama instalasi (sesuatu seperti ini: /programming/415677/how-to-replace-placeholder-in-a-text-file )Pro: Semua definisi variabel terkandung dalam skrip. Sangat mudah untuk mengunduh skrip secara manual dan mengonfigurasi variabel untuk pengguna yang lebih memilih editor daripada installer.
Cons: Sulit untuk mengkonfigurasi ulang variabel melalui installer setelah mereka berada di tempat. Kecuali saya membuat regexp yang lebih kompleks yang akan rentan terhadap kesalahan.
Gunakan file config , pada dasarnya skrip shell lain dengan tugas, dan gunakan
source
untuk memasukkannya. (Dan mungkin letakkan di~/.scriptname
? Script utama disalin ke/usr/local/bin
)Pro: Sangat mudah untuk mengkonfigurasi ulang skrip. Bahkan dapat menambahkan parameter untuk melakukannya dari skrip utama (Mungkin akan bekerja di solusi pertama juga, tetapi mengedit skrip dari itu sendiri tidak terdengar seperti ide yang sangat bagus)
Cons: Script sekarang tergantung pada dua file dan pengguna diharuskan untuk menjalankan installer untuk file konfigurasi yang akan dibuat. Ini dapat diselesaikan dengan membuat file konfigurasi secara otomatis jika tidak ada. Tetapi menemukan file konfigurasi eksternal masih akan lebih rumit bagi pengguna yang hanya ingin mengunduh skrip, mengeditnya, dan selesai dengan itu.
Juga, beberapa opsi mengenai bagaimana konfigurasi harus dikelola oleh pengguna setelah instalasi:
Git seperti
$ myscript config server.host example.org $ myscript config server.proxypath / home / johndoe / proxy $ myscript config server.httppath / home / johndoe / webInteraktif
$ myscript config
Masukkan nama host server: example.org
Masukkan path ke proxy di server: / home / johndoe / proxy
Masukkan path ke direktori http di server: / home / johndoe / webgetopts dengan opsi panjang
$ myscript --host example.org --proxypath / home / johndoe / proxy --httppath / home / johndoe / webSederhana
$ myscript config example.org / home / johndoe / proxy / home / johndoe / web
Apakah ada cara lain untuk melakukan ini yang akan Anda pertimbangkan?
Adakah praktik terbaik, sesuatu yang elegan?
sumber
Jawaban:
Apa yang akan saya harapkan dari program waras (skrip shell atau tidak):
sumber
mount
ataussh
memungkinkan Anda untuk menggunakan sintaks yang sama pada baris perintah dan dalam konfigurasi. Anda tidak perlu menyalin sintaks baris perintah secara total; alih-alih '--foo = bar' Anda dapat menggunakan 'foo = bar'. Jika Anda menggunakan 'BarOption: Foo' sebagai gantinya, itu akan jauh lebih tidak nyaman: kebutuhan untuk mengingat jika kasusnya signifikan, kata kunci mana yang diterima dalam file dan yang pada baris perintah, dan ketidakmampuan untuk menyalin-menempelkan perintah yang berfungsi baris ke file konfigurasi dengan hanya pengeditan kosmetik.Ketika saya harus menulis skrip yang rumit dengan berbagai pilihan konfigurasi saya menggunakan Python dengan argparse dan ConfigParser perpustakaan. Itu membantu implementasi tetapi proses ini berlaku untuk skrip shell apa pun:
Preferensi saya adalah file konfigurasi untuk menyimpan opsi yang disukai ketika skrip akan digunakan berulang kali, tetapi biarkan argumen baris perintah menimpa. Tulis file config menggunakan parameter tersebut saat pertama kali dijalankan. File config kemudian dapat dibagikan dan dikomit ke repositori kode.
Dalam kasus terbaru saya, saya juga menulis default ke
[DEFAULT]
bagian di bagian atas file konfigurasi, kemudian memiliki bagian untuk setiap "lingkungan" dengan penggantian yang sesuai untuk masing-masing. "Lingkungan" adalah parameter pertama yang tidak disebutkan namanya untuk skrip. Jadi dalam hal ini parameter dipilih sebagai bawaan bawaan -> file konfigurasi default -> nilai bagian file konfigurasi -> parameter baris perintah . Parameter baris perintah tambahan memberikan opsi untuk menimpa konfigurasi yang ada dengan nilai jalankan terbaru. File konfigurasi ini ditulis ke direktori saat ini sehingga berlaku per proyek dan dapat dilakukan dengan sisa kode. Orang lain yang memeriksa proyek yang sama kemudian akan mulai dengan konfigurasi yang sama.sumber
default.config
file yang terletak di direktori yang sama dengan skrip, kemudian mencari file konfigurasi di~/.scriptname
untuk menimpa nilai-nilai ini. Dengan begitu setiap nilai memiliki nilai default yang valid dan lebih mudah dipertahankan.Mengedit placeholder rentan kesalahan.
Saya akan menggunakan file Config.
Kekhawatiran Anda tentang ketergantungan valid, namun, saya tidak ingat menggunakan terlalu banyak alat yang terdiri dari satu file. Jadi secara teori Anda benar, tetapi secara praktis seharusnya cukup baik.
Sebuah Pilihan ketiga adalah untuk membuat software konfigurasi menulis versi disesuaikan baru yang khusus untuk pilihan dan parameter yang dipilih. Ini mungkin lebih sulit untuk ditulis dan diuji tentunya :)
sumber