Я пишу сценарий bash, который широко использует wget. Чтобы определить все общие параметры в одном месте, я храню их в переменных. Вот кусок кода:
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 "$@"
}
К сожалению, не работает. Почему-то мне не хватает правильного способа хранения параметров для переменных $ useragent, $ save_cookies_cmd, $ load_cookies_cmd и вызова wget, передавая эти переменные в качестве параметров.
Я хочу, чтобы результат командной строки как это:
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
РЕДАКТИРОВАТЬ: мое окончательное решение:
В конце концов мой скрипт правильно работает с этим:
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" "$@"
}
Спасибо за все ваши ответы.
bash
wget
variable-substitution
Филипе
источник
источник
Проблема заключается в порядке расширений (подробности см. В разделе РАСШИРЕНИЕ
man bash
). Двойные кавычки внутри переменной не работают как двойные кавычки при раскрытии переменной:Обратите внимание, что использование «$ b» вам не поможет.
Используйте массивы, чтобы вы могли позволить bash выполнять тяжелую работу и забыть про цитирование и экранирование:
источник
Пожалуйста, прости меня, но я взял на себя смелость
parameterizing
твоей функции. Поскольку значения вPARAMS
будут устанавливать только ненастроенную переменную, вы можете очень легко переопределить их значения - это позволит вам установить разумные значения по умолчанию и, тем не менее, изменять значения для каждого вызова функции, как вам нравится. Например, в приведенной выше функции я установил все значения,echo
и вот вывод, когда он работает как есть:Но если установить
"$userstring"
наNULL
:Или:
Или:
Я написал больше здесь и здесь .
parameter expansion
источник