首页 > 解决方案 > 如何在 macOS 上创建系统级命令别名

问题描述

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

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

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

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

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

标签: javamacosterminalmacos-big-sur

解决方案


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

我建议改为创建一个实际的命令。由于这只是现有二进制文件的另一个名称(/Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home/bin/java),您可以只使用指向原始二进制文件的符号链接(更多信息复杂,创建一个包装脚本可能更有意义)。/usr/local/bin 在 macOS 中默认不存在,但它是默认存在的PATH(在大多数情况下,除了cron作业,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

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


推荐阅读