在别名定义之间切换

在别名定义之间切换

我正在尝试使用命令在两个定义之间切换(尝试从命令行alias使用 Rustcargo和 Crystal 编译器)。crystal我的 中有以下内容~/.bash_profile

   别名 c=水晶
   别名货物=“unalias c;别名c=货物”
   别名水晶=“unalias c;别名c=水晶”

但是,当我尝试运行类似的东西时

> c 宏.rs

在 macOS 终端中我得到

bash:别名:macro.rs:找不到

这里可能有什么问题?

答案1

让我们看看这里发生了什么:

$ 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命令还可以防止别名扩展。

相关内容