Piszę skrypt bash, który intensywnie wykorzystuje wget. Aby zdefiniować wszystkie wspólne parametry w jednym miejscu, przechowuję je w zmiennych. Oto fragment kodu:
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 "$@"
}
Niestety nie działa. Jakoś brakuje mi właściwego sposobu przechowywania parametrów w zmiennych $ useragent, $ save_cookies_cmd, $ load_cookies_cmd i caling wget przekazując te zmienne jako parametry.
Chcę wynikową linię poleceń w następujący sposób:
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
EDYCJA: Moje ostateczne rozwiązanie:
W końcu mój skrypt działa poprawnie z tym:
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" "$@"
}
Dziękuję za wszystkie odpowiedzi.
bash
wget
variable-substitution
Filipe
źródło
źródło
Problem polega na kolejności rozszerzeń (szczegóły w części ROZSZERZENIE
man bash
). Podwójne cudzysłowy wewnątrz zmiennej nie działają jako podwójne cudzysłowy, gdy zmienna jest rozwinięta:Pamiętaj, że użycie „$ b” nie pomaga.
Używaj tablic, aby pozwolić bashowi wykonać ciężką pracę i zapomnieć o cytowaniu i ucieczce:
źródło
Proszę wybacz mi, ale skorzystałem z
parameterizing
twojej funkcji. Ponieważ wartości wPARAMS
będzie tylko ustawić zmienną wyłączony, można bardzo łatwo zastąpić ich wartości - pozwala na ustawienie domyślne rozsądnych i jeszcze ciągle zmieniać wartości na wywołanie funkcji, jak chcesz. Na przykład w powyższej funkcji ustawiłem wszystkie wartości naecho
i oto dane wyjściowe, gdy są uruchomione tak, jak jest:Ale jeśli mogę ustawić
"$userstring"
naNULL
:Lub:
Lub:
Pisałem więcej o tu i tu .
parameter expansion
źródło