Estoy escribiendo un script bash que usa ampliamente wget. Para definir todos los parámetros comunes en un lugar, los almaceno en variables. Aquí hay un fragmento de código:
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 "$@"
}
Tristemente no está funcionando. De alguna manera, me falta la forma correcta de almacenar parámetros en las variables $ useragent, $ save_cookies_cmd, $ load_cookies_cmd y caling wget pasando estos vars como parámetros.
Quiero la línea de comando de resultado como esta:
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
EDITAR: Mi solución final:
Al final, mi script funciona correctamente con esto:
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" "$@"
}
Gracias por todas tus respuestas.
bash
wget
variable-substitution
Filipe
fuente
fuente
El problema radica en el orden de las expansiones (ver EXPANSIÓN en
man bash
para más detalles). Las comillas dobles dentro de una variable no funcionan como comillas dobles cuando la variable se expande:Tenga en cuenta que usar "$ b" no lo ayuda.
Use matrices, para que pueda dejar que bash haga el trabajo duro y puede olvidarse de citar y escapar:
fuente
Perdóname, pero me he tomado la libertad de
parameterizing
tu función. Debido a que los valores de laPARAMS
voluntad sólo se establece una variable definida, se puede anular sus valores muy fácilmente - que le permite establecer configuraciones normales y aún así cambiar los valores por llamada función que te gusta. Por ejemplo, en la función anterior, configuré todos los valoresecho
y aquí está la salida cuando se ejecuta como está:Pero si configuro
"$userstring"
aNULL
:O:
O:
He escrito más aquí y aquí .
parameter expansion
fuente