Estou escrevendo um script bash que usa extensivamente o wget. Para definir todos os parâmetros comuns em um único local, eu os guardo em variáveis. Aqui está um pedaço 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 "$@"
}
Infelizmente não está funcionando. De alguma forma, estou perdendo o caminho certo para armazenar parâmetros nas variáveis $ useragent, $ save_cookies_cmd, $ load_cookies_cmd e caling wget passando esses vars como parâmetros.
Eu quero a linha de comando do 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
EDIT: Minha solução final:
No final, meu script está funcionando corretamente com isso:
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" "$@"
}
Obrigado por todas as suas respostas.
bash
wget
variable-substitution
Filipe
fonte
fonte
O problema está na ordem das expansões (consulte EXPANSÃO em
man bash
para obter detalhes). Aspas duplas dentro de uma variável não funcionam como aspas duplas quando a variável é expandida:Observe que o uso de "$ b" não ajuda.
Use matrizes para permitir que o bash faça o trabalho duro e esqueça de citar e escapar:
fonte
Por favor, perdoe-me, mas tomei a liberdade de
parameterizing
sua função. Porque os valores naPARAMS
vontade única definir uma variável definida, você pode substituir seus valores muito facilmente - ele permite que você defina os padrões sensatos e ainda alterar valores por chamada de função como você gosta. Por exemplo, na função acima, eu configurei todos os valores paraecho
e aqui está a saída quando executada como é:Mas se eu definir
"$userstring"
paraNULL
:Ou:
Ou:
Eu escrevi mais aqui e aqui .
parameter expansion
fonte