J'écris un script bash qui utilise largement wget. Pour définir tous les paramètres communs en un seul endroit, je les stocke sur des variables. Voici un morceau de code:
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 ne fonctionne pas. D'une certaine manière, je manque la bonne façon de stocker les paramètres sur les variables $ useragent, $ save_cookies_cmd, $ load_cookies_cmd et caling wget en passant ces variables en tant que paramètres.
Je veux la ligne de commande de résultat comme ceci:
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: Ma solution finale:
En fin de compte, mon script fonctionne correctement avec ceci:
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" "$@"
}
Merci pour toutes vos réponses.
bash
wget
variable-substitution
Filipe
la source
la source
Le problème réside dans l'ordre des extensions (voir EXPANSION dans
man bash
pour plus de détails). Les guillemets doubles à l'intérieur d'une variable ne fonctionnent pas comme des guillemets doubles lorsque la variable est développée:Notez que l'utilisation de "$ b" ne vous aide pas.
Utilisez des tableaux, afin que vous puissiez laisser bash faire le travail et oublier les citations et les échappements:
la source
Veuillez me pardonner, mais j'ai pris la liberté de
parameterizing
votre fonction. Parce que les valeursPARAMS
seront uniquement définir une variable unset, vous pouvez remplacer les valeurs très facilement - il vous permet de définir les valeurs par défaut de sain d' esprit et pourtant encore changer les valeurs par appel de fonction que vous aimez. Par exemple, dans la fonction ci-dessus, j'ai défini toutes les valeursecho
et voici la sortie lorsqu'elle est exécutée telle quelle:Mais si je mets
"$userstring"
àNULL
:Ou:
Ou:
J'ai écrit plus ici et ici .
parameter expansion
la source