我正在尝试使用命令在两个定义之间切换(尝试从命令行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
命令还可以防止别名扩展。