如何在 macOS 上创建系统级命令别名

How to make a system-wise command alias on macOS

我想在 java 中执行一些旧代码,但是它的旧版本变得越来越复杂。因此,我想创建我的“Java 别名”,以便命令“java11”将执行 java11 二进制命令。不幸的是,在 mac,我没有成功。

我尝试按照教程进行操作,希望在您的 ~/.zshrc 中添加别名部分。我这样做了,效果很好,但它不适用于 bash 脚本,这真的很烦人。

这是 .zshrc 中我的 java11 别名的行:

alias java11="/Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home/bin/java $@"

(我不知道它是否会做任何事情,但我还在我的 .bashrc 中添加了别名行)

别名对此类事情的用处有限。它们需要在 shell 初始化文件中配置(并且 使用哪个 文件取决于 shell、它的启动模式等),它们'默认情况下在脚本中被禁用,并且当命令由 shell 以外的其他东西执行时它们根本不可用(例如在 sudo java11 ... 中,执​​行的是 sudo,而且它对别名一无所知)。

我建议改为创建一个实际的命令。由于这只是现有二进制文件 (/Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home/bin/java) 的另一个名称,您可以只对原始二进制文件使用符号 link(对于更复杂的东西,它可能会使有意义的是创建一个包装脚本)。 /usr/local/bin 在 macOS 中默认不存在,但它在默认 PATH 中(在大多数情况下,除了 cron jobs,grrr),所以如果你创建它,它将是自动搜索。所以这样的事情应该有效:

sudo mkdir -p /usr/local/bin
sudo ln -s /Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home/bin/java /usr/local/bin/java11

在您的 运行ning zsh 会话中,您可能需要 运行 rehash 让他们注意到新的二进制文件。并删除别名,以防止它覆盖新命令。