Bash
在別名定義之間切換
我正在嘗試使用
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
命令還可以防止別名擴展。