
Ich möchte einen Alias erstellen, curl
der die Datei automatisch curl
in eine gleichnamige Datei im aktuellen Verzeichnis schreibt.
Zum Beispiel:
% curl https://bootstrap.pypa.io/get-pip.py
curl https://bootstrap.pypa.io/get-pip.py > get-pip.py
Gibt es eine Möglichkeit, den Alias dazu zu bringen, das folgende Argument zu lesen und es wie folgt in das tatsächlich ausgeführte Skript einzufügen?
Antwort1
Aliase verarbeiten keine Argumente. Zum Glück tun dies Funktionen:
mycurl () {
curl "$1" > "${1##*/}"
}
Dabei ${1##*/}
handelt es sich um eine Form der Parametererweiterung, die besagt: „Entferne alles bis zum letzten Schrägstrich in $1.“
Antwort2
Wenn duerforderlichDazu würde ich eine Bash-Funktion verwenden oder (unter noch komplizierteren Umständen) eine eigene Skriptdatei in ~/bin/
... verwenden.
Sie können aber auch einfach wget
anstelle von verwenden curl
. Dies sollte standardmäßig das tun, was Sie verlangen, und als Bonus können Sie das Problem umgehen, dass eine URL ohne angegebene Datei vorliegt (z. B.: http://example.com/
).
Antwort3
Es gibt einige Workarounds, bei denen Sie eine Kombination aus Umgebungsvariablen ( PWD
), Befehlsersetzungen oder IO-Umleitungen innerhalb der Aliase verwenden können. Hier ist ein ähnliches Beispiel (in Bash):
alias curl='xargs -I% curl -o "%" "%" <<<'
Dadurch wird die Datei unter demselben Namen wie die URL gespeichert:
$ curl https://bootstrap.pypa.io/get-pip.py
Warning: Failed to create the file https://bootstrap.pypa.io/get-pip.py
Dies kann weiter korrigiert werden, indem man diese URL in einen Dateinamen umwandelt durchZeichenfolge manipulierenmithilfe von Shell-Operationen, Befehlsersetzung basename
oder awk
anderen Tools.
Alternativ können Sie jederzeit curl
auf Folgendes verweisen wget
:
$ alias curl=wget
$ curl https://bootstrap.pypa.io/get-pip.py
'get-pip.py' saved