如何將 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 相關。)

相關內容