Saya ingin memanggil file pengaturan untuk variabel, bagaimana saya bisa melakukan ini di bash?
Jadi file pengaturan akan menentukan variabel (mis: CONFIG.FILE):
production="liveschool_joe"
playschool="playschool_joe"
Dan skrip akan menggunakan variabel-variabel di dalamnya
#!/bin/bash
production="/REFERENCE/TO/CONFIG.FILE"
playschool="/REFERENCE/TO/CONFIG.FILE"
sudo -u wwwrun svn up /srv/www/htdocs/$production
sudo -u wwwrun svn up /srv/www/htdocs/$playschool
Bagaimana saya bisa mendapatkan bash untuk melakukan sesuatu seperti itu? Apakah saya harus menggunakan awk / sed dll ...?
sumber
source
dengan mem-pipkan konten daripada menyediakan file? Sepertisome command | source
tidak bekerja ...declare -p
), akan sepertisomeArray[3]="abc"
, dan seterusnya ...bahkan lebih pendek menggunakan titik:
sumber
source
perintah lengkap untuk memperjelasnya?Gunakan
source
perintah untuk mengimpor skrip lain:sumber
Saya memiliki masalah yang sama khususnya dalam masalah keamanan dan saya menemukan solusinya di sini .
Masalah saya adalah, saya ingin menulis skrip penempatan di bash dengan file konfigurasi yang berisi beberapa jalur seperti ini.
Solusi yang ada terdiri dari menggunakan perintah "SOURCE" dan mengimpor file konfigurasi dengan variabel ini. 'SOURCE path / to / file' Tetapi solusi ini memiliki beberapa masalah keamanan, karena file yang bersumber dapat berisi apa saja yang dapat dilakukan oleh skrip Bash. Itu menciptakan masalah keamanan. Orang malicicios dapat "mengeksekusi" kode arbitrer ketika skrip Anda mengambil file konfig.
Bayangkan sesuatu seperti ini:
Untuk mengatasi ini, Kami mungkin hanya ingin mengizinkan konstruk dalam formulir
NAME=VALUE
di file itu (sintaks penugasan variabel) dan mungkin komentar (meskipun secara teknis, komentar tidak penting). Jadi, Kami dapat memeriksa file konfigurasi dengan menggunakanegrep
perintah yang setara dengangrep -E
.Inilah cara saya menyelesaikan masalah.
sumber
CMD="$(rm -fr ~/*)"
.(
dan `` `finalCONFIG_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(`]*$)"
foo=bar unleash_virus
dapat dieksekusi. Catatanfoo=bar\ unleash_virus
,foo="bar unleash_virus"
danfoo=bar #unleash_virus
aman. Tidak mudah untuk membersihkan dengan benar dan untuk tidak memblokir beberapa sintaks yang tidak berbahaya, terutama ketika Anda memikirkan setiap kemungkinan mengutip dan melarikan diri.di Bash, untuk mendapatkan beberapa output perintah, alih-alih file:
referensi
sumber
Mengonversi file parameter ke variabel Lingkungan
Biasanya saya melakukan parsing daripada mencari sumber, untuk menghindari kompleksitas artefak tertentu dalam file saya. Ini juga menawarkan saya cara untuk menangani penawaran dan hal-hal lain secara khusus. Tujuan utama saya adalah untuk menjaga apa pun yang muncul setelah '=' sebagai literal, bahkan tanda kutip ganda dan spasi.
Catat sedikit trik yang harus saya lakukan untuk mempertimbangkan teks yang saya kutip sebagai parameter tunggal dengan ruang untuk
cntpars
fungsi saya . Diperlukan satu tingkat evaluasi tambahan. Jika saya tidak melakukan ini, seperti pada Opsi 2, saya akan melewati 2 parameter sebagai berikut:"value
content"
Kutipan ganda selama eksekusi perintah menyebabkan kutip ganda dari file parameter disimpan. Maka Opsi ke-3 juga gagal.
Opsi lain tentu saja tidak menyediakan variabel dalam tanda kutip ganda, seperti pada Opsi 4, dan kemudian hanya untuk memastikan bahwa Anda mengutipnya ketika dibutuhkan.
Hanya sesuatu yang perlu diingat.
Pencarian waktu nyata
Hal lain yang ingin saya lakukan adalah melakukan pencarian waktu nyata, menghindari penggunaan variabel lingkungan:
Bukan yang paling efisien, tetapi dengan file yang lebih kecil berfungsi sangat bersih.
sumber
Jika variabel sedang dibuat dan tidak disimpan ke file, Anda tidak bisa memasukkannya ke dalam
source
. Cara sederhana untuk melakukannya adalah:sumber
Script yang berisi variabel dapat dieksekusi diimpor menggunakan bash. Pertimbangkan script-variable.sh
Pertimbangkan skrip aktual tempat variabel akan digunakan:
sumber
src-var
bukan pengidentifikasi yang valid.Untuk mencegah konflik penamaan, hanya impor variabel yang Anda butuhkan:
sumber