![如何将 ZSH 别名后面的所有内容放置在其定义的中间?](https://linux22.com/image/191590/%E5%A6%82%E4%BD%95%E5%B0%86%20ZSH%20%E5%88%AB%E5%90%8D%E5%90%8E%E9%9D%A2%E7%9A%84%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9%E6%94%BE%E7%BD%AE%E5%9C%A8%E5%85%B6%E5%AE%9A%E4%B9%89%E7%9A%84%E4%B8%AD%E9%97%B4%EF%BC%9F.png)
我有这个文件:
/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 相关。)