argumentbewusster Alias-Befehl?

argumentbewusster Alias-Befehl?

Ich möchte einen Alias ​​erstellen, curlder die Datei automatisch curlin 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 wgetanstelle 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 basenameoder awkanderen Tools.

Alternativ können Sie jederzeit curlauf Folgendes verweisen wget:

$ alias curl=wget
$ curl https://bootstrap.pypa.io/get-pip.py
'get-pip.py' saved

verwandte Informationen