Bash

在別名定義之間切換

  • August 24, 2017

我正在嘗試使用alias命令在兩個定義之間切換(嘗試從命令行使用 Rustcargo和 Crystal 的編譯器crystal)。我有以下內容~/.bash_profile

別名 c=水晶
其他貨物=“unalia c;別名c=貨物”
別名水晶=“unalias c;別名c=水晶”

但是,當我嘗試執行類似

> c 宏.rs

在 macOS 終端中我得到

bash:別名:macro.rs:未找到

這裡可能有什麼問題?

讓我們看看這裡發生了什麼:

$ set -x
$ c file
+ unalias c
+ alias c=crystal file
bash: alias: file: not found
$ set +x

因此,c file擴展為unalias c; alias c=crystal file(通過中間擴展為crystal file)。

alias c=crystal file沒有意義。我想你可能想要的是crystal file被處決。

您可能想要重命名切換含義的別名c

alias usecrystal="alias c=crystal"
alias usecargo="alias c=cargo"

或者,您可以保護命令免受別名擴展:

alias c="\crystal"
alias crystal="alias c=\crystal"
alias cargo="alias c=\cargo"

或使用command(恕我直言看起來更好):

alias c="command crystal"
alias crystal='alias c="command crystal"'
alias cargo='alias c="command cargo"'

command命令還可以防止別名擴展。

引用自:https://unix.stackexchange.com/questions/388067