Apa cara terbaik untuk membaca file konfigurasi di bash?
Misalnya, Anda memiliki skrip dan tidak mau mengisi semua konfigurasi secara manual setiap kali Anda memanggil skrip.
Sunting 1: Saya pikir saya tidak memperjelas, jadi: yang saya inginkan adalah ... Saya memiliki konfigurasi yang seperti
variable_name value
variable_name value ...
dan saya ingin membacanya. Saya tahu saya hanya bisa menerima argumen yang saya cari atau lebih ... tapi mungkin ada cara yang lebih cerdas :)
Jawaban:
Seperti kata mbiber,
source
file lain. Misalnya, file konfigurasi Anda (misalnyasome.config
) adalah:Dan skrip Anda dapat terlihat seperti:
Banyak file dalam
/etc/default
biasanya berfungsi sebagai file konfigurasi untuk skrip shell lain dengan cara yang sama. Contoh yang sangat umum dari posting di sini adalah/etc/default/grub
. File ini digunakan untuk mengatur opsi konfigurasi untuk GRUB, karenagrub-mkconfig
skrip shell yang sumbernya:Jika Anda benar-benar harus memproses konfigurasi formulir:
Maka Anda dapat melakukan sesuatu seperti:
(Anda juga bisa melakukan sesuatu seperti
eval "$var=$value"
, tapi itu lebih berisiko daripada sumber skrip. Anda secara tidak sengaja dapat memecahkan itu lebih mudah daripada file yang bersumber.)sumber
=
sejak awal?/etc/default
- dan sebagian besar digunakan dengan baik. Jika pengguna yang tidak mengerti Anda memiliki akses ke konfigurasi untuk sesuatu yang berjalan sebagai root, itu sudah menjadi penyebab hilang.Jelas, saya bukan
bash
spesialis di sini, tetapi konsepnya tidak boleh berbeda dalam bahasa apa pun yang Anda gunakan:Sebuah contoh
Dalam contoh di bawah ini, Anda dapat menggunakan skrip dasar (sangat) untuk mengatur string, atau mencetak string, seperti yang diatur dalam file konfigurasi Anda:
Kemudian
Untuk mengatur string ke file konfigurasi Anda:
Selanjutnya, untuk mencetak string, seperti yang didefinisikan dalam "configfile" Anda:
Tentu saja, dalam skrip yang diterapkan nyata, Anda perlu menambahkan banyak hal untuk memastikan argumennya benar, memutuskan apa yang harus dilakukan ketika input salah, file pengaturan tidak ada dll, tetapi:
Ini adalah ide dasar
sumber
Gunakan
source
atau.
untuk memuat dalam file.atau
Anda juga disarankan untuk memeriksa apakah file tersebut ada sebelum memuatnya karena Anda tidak ingin melanjutkan menjalankan skrip Anda jika file konfigurasi tidak ada.
sumber
Saya menggunakan yang ini ...
File conf diuraikan dengan sed dan kemudian dievaluasi sebagai tugas variabel sederhana
Nilai kunci parsing sed sed pertama (mendukung juga = dikelilingi dengan spasi)
Sed kedua menghapus spasi di sekitar = tanda untuk penetapan variabel yang valid
Perawatan sed yang lebih lanjut dapat ditambahkan
Semua teks lain yang tidak cocok dengan file conf akan dihapus (termasuk # atau; komentar dan lainnya)
Ketahuilah bahwa perintah shell baris tunggal juga dapat dievaluasi dari file konfigurasi ini!
sumber
cat
. Mengapa Anda memohonsed
dua kali back-to-back? Anda dapat mengaitkansed
perintah seperti ini:sed -r '/[^=]+=[^=]+/!d;s/\s+=\s/=/g'
sed
perintah ini akan menghasilkan output kosong untuk entri file konfigurasi sampel dalam pertanyaan. -1.
perintah dan proses pengalihan bukan variabel sementara untuk menahan output dari sub-proses:. <(sed ... "$CFG_FILE")
eval $(sed -r '/[^=]+=[^=]+/!d;s/\s+=\s/=/g' "$CFG_FILE")
yang merupakan cara yang lebih baik untuk memahami apa yang sedang terjadi..
mengharapkan file dan proses substitusi diperluas ke file.. <(echo echo foo)
berfungsi seperti yang diharapkan dalam Bash v4.3.11. Dalam contoh kecil mungkin tidak masalah. Saya lebih suka tidak melewati beberapa kilobyte melalui substitusi perintah.sumber