Saya sedang menulis skrip bash yang banyak menggunakan wget. Untuk mendefinisikan semua parameter umum di satu tempat, saya menyimpannya di variabel. Berikut sepotong kode:
useragent='--user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"'
cookies_file="/tmp/wget-cookies.txt"
save_cookies_cmd="--save-cookies $cookies_file --keep-session-cookies"
load_cookies_cmd="--load-cookies $cookies_file --keep-session-cookies"
function mywget {
log "#!!!!!!!!!# WGET #!!!!!!!!!# wget $quiet $useragent $load_cookies_cmd $@"
wget $useragent $load_cookies_cmd "$@"
}
Saddly tidak berfungsi. Entah bagaimana saya kehilangan cara yang tepat untuk menyimpan parameter pada variabel $ useragent, $ save_cookies_cmd, $ load_cookies_cmd dan caling wget melewati vars ini sebagai parameter.
Saya ingin commandline hasil seperti ini:
wget --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" --load-cookies /tmp/wget-cookies.txt --keep-session-cookies http://mysite.local/myfile.php
EDIT: Solusi terakhir saya:
Pada akhirnya skrip saya berfungsi dengan benar dengan ini:
useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"
useragent_cmd="--user-agent=$useragent"
cookies_file="/tmp/wget-cookies.txt"
save_cookies_cmd="--save-cookies $cookies_file --keep-session-cookies"
load_cookies_cmd="--load-cookies $cookies_file --keep-session-cookies"
function mywget {
log "#!!!!!!!!!# WGET #!!!!!!!!!# wget $load_cookies_cmd $useragent_cmd $@"
wget $load_cookies_cmd "$useragent_cmd" "$@"
}
Terima kasih atas semua tanggapan Anda.
bash
wget
variable-substitution
Filipe
sumber
sumber
Masalahnya terletak pada urutan ekspansi (lihat EKSPANSI
man bash
untuk detailnya). Kutipan ganda di dalam variabel tidak berfungsi sebagai tanda kutip ganda ketika variabel diperluas:Perhatikan bahwa menggunakan "$ b" tidak membantu Anda.
Gunakan array, sehingga Anda dapat membiarkan bash melakukan kerja keras dan Anda dapat melupakan tentang mengutip dan melarikan diri:
sumber
Maafkan saya, tapi saya telah mengambil kebebasan dari
parameterizing
fungsi Anda. Karena nilai-nilai di hanyaPARAMS
akan mengatur variabel yang tidak disetel, Anda dapat mengganti nilainya dengan sangat mudah - ini memungkinkan Anda untuk mengatur default waras dan masih mengubah nilai per panggilan fungsi sesuka Anda. Sebagai contoh, dalam fungsi di atas, saya telah menetapkan semua nilai dan inilah output ketika dijalankan seperti:echo
Tetapi jika saya mengatur
"$userstring"
keNULL
:Atau:
Atau:
Saya sudah menulis lebih banyak di sini dan di sini .
parameter expansion
sumber