Como fazer com que tudo que segue um alias ZSH seja colocado no meio de sua definição?

Como fazer com que tudo que segue um alias ZSH seja colocado no meio de sua definição?

Eu tenho este arquivo:

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

Quero criar um alias para que ele seja executado como se estivesse no meu diretório atual. Eu estava pensando algo assim:

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

mas não conheço uma maneira de fazer isso.

Responder1

Em vez disso, use uma função:

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

"$@"expande para os argumentos da função, e aqui usei ( .. )em vez de { .. }ao redor do corpo da função para fazê-la funcionar em um subshell. O ambiente subshell possui um diretório de trabalho próprio, portanto, não é necessário retornar ao diretório original posteriormente.

(Isso deve funcionar pelo menos no Zsh e no Bash, se não me engano.)

Ver:No Bash, quando criar um alias, quando criar um script e quando escrever uma função?(o título diz Bash, mas a maior parte disso provavelmente também é relevante para Zsh.)

informação relacionada