如何将 ZSH 别名后面的所有内容放置在其定义的中间?

如何将 ZSH 别名后面的所有内容放置在其定义的中间?

我有这个文件:

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

我想给它起一个别名,以便它像在我当前的目录中一样运行。我在想这样的事情:

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

但我不知道有什么方法可以做到这一点。

答案1

使用函数代替:

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

"$@"扩展到函数的参数,这里我使用( .. )而不是{ .. }函数体周围来使其在子 shell 中运行。子 shell 环境有自己的工作目录,因此之后不需要跳回原始目录。

(如果我没记错的话,这至少应该在 Zsh 和 Bash 中有效。)

看:在 Bash 中,何时使用别名、何时使用脚本以及何时编写函数?(标题说的是 Bash,但其中大部分也可能与 Zsh 相关。)

相关内容