java - 如何在 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 中添加了别名行)
解决方案
别名对此类事情的用处有限。它们需要在 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
才能让他们注意到新的二进制文件。并删除别名,以防止它覆盖新命令。
推荐阅读
- laravel - 类 App\Http\Middleware\Authenticate:api 在广播中不存在
- xml - XAdES - XL 验证程序?
- database - 使用 Postman 在我的数据库中创建新位置并收到 400 错误
- javascript - 如何在同步循环中运行赛普拉斯命令?
- cordova - 插件不支持此项目的 cordova 版本。科尔多瓦:8.1.1,失败的版本要求:> = 9.0.0
- node.js - 多次调用后没有 Access-Control-Allow-Origin 编辑 > Axios 网络错误捕获
- python - 删除时从子模型中删除文件对象
- autohotkey - AutoHotkey - 脚本在一段时间后停止工作
- typescript - Vue:无效的道具:类型
- java - 更改枢轴评估位置会导致快速排序失败