Ich schreibe ein Bash-Skript, das häufig wget verwendet. Um alle gängigen Parameter an einem Ort zu definieren, speichere ich sie in Variablen. Hier ist ein Stück 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 funktioniert nicht. Irgendwie fehlt mir der richtige Weg, um Parameter für die Variablen $ useragent, $ save_cookies_cmd, $ load_cookies_cmd zu speichern und diese Variablen als Parameter zu übergeben.
Ich möchte die Ergebnisbefehlszeile wie folgt:
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: Meine endgültige Lösung:
Am Ende funktioniert mein Skript korrekt damit:
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" "$@"
}
Vielen Dank für alle Ihre Antworten.
bash
wget
variable-substitution
Filipe
quelle
quelle
Das Problem liegt in der Reihenfolge der Erweiterungen (
man bash
Details siehe ERWEITERUNG in ). Doppelte Anführungszeichen in einer Variablen funktionieren nicht als doppelte Anführungszeichen, wenn die Variable erweitert wird:Beachten Sie, dass die Verwendung von "$ b" Ihnen nicht hilft.
Verwenden Sie Arrays, damit Sie bash die harte Arbeit machen lassen und das Zitieren und Entkommen vergessen können:
quelle
Bitte vergib mir, aber ich habe mir die Freiheit
parameterizing
deiner Funktion genommen. Da die Werte inPARAMS
wird nur eine unset Variable gesetzt, können Sie ihre Werte sehr leicht außer Kraft setzen - es Sie Satz vernünftige Default ermöglicht und dennoch Werte pro Funktionsaufruf ändern , wie Sie möchten. Zum Beispiel habe ich in der obigen Funktion alle Werte auf gesetztecho
und hier ist die Ausgabe, wenn sie so ausgeführt wird, wie sie ist:Aber wenn ich mich
"$userstring"
aufNULL
:Oder:
Oder:
Ich habe hier und hier mehr darüber geschrieben .
parameter expansion
quelle