Wie kann alles, was einem ZSH-Alias ​​folgt, in die Mitte seiner Definition gestellt werden?

Wie kann alles, was einem ZSH-Alias ​​folgt, in die Mitte seiner Definition gestellt werden?

Ich habe diese Datei:

/Users/MYUSERNAME/asciidots/asciidots/__main__.py

Ich möchte dies mit einem Alias ​​versehen, damit es so ausgeführt wird, als ob es sich in meinem aktuellen Verzeichnis befände. Ich dachte dabei an so etwas:

alias asciidots="OLDCWD=$PWD && cd /Users/MYUSERNAME/asciidots/asciidots/ && python3 __main__.py ALL_ARGUMENTS_FOLLOWING_THE_ALIAS && cd $OLDCWD"

aber ich kenne keine Möglichkeit, das zu tun.

Antwort1

Verwenden Sie stattdessen eine Funktion:

asciidots() (
    cd /Users/MYUSERNAME/asciidots/asciidots/ &&
    python3 __main__.py "$@"
)

"$@"erweitert sich zu den Argumenten der Funktion, und hier habe ich ( .. )anstelle von { .. }um den Funktionskörper herum verwendet, um es in einer Subshell laufen zu lassen. Die Subshell-Umgebung hat ein eigenes Arbeitsverzeichnis, sodass ein anschließender Rücksprung in das ursprüngliche Verzeichnis nicht erforderlich ist.

(Das sollte zumindest in Zsh und Bash funktionieren, wenn ich mich nicht irre.)

Sehen:Wann sollte in Bash ein Alias ​​verwendet werden, wann ein Skript und wann eine Funktion geschrieben werden?(im Titel steht Bash, aber das meiste davon ist wahrscheinlich auch für Zsh relevant.)

verwandte Informationen