macOS 10.13.3下sudo与普通用户执行R CMD javareconf输出差异问题
解决sudo与普通用户执行
R CMD javareconf绑定不同Java版本的问题 这问题我之前在macOS上配置R的Java环境时也碰到过,核心原因很简单:sudo执行命令时的环境变量和普通用户不一样——macOS的sudo默认会重置PATH到系统默认值,它不会加载你个人shell配置(比如~/.bash_profile或~/.zshrc)里添加的Java10路径,所以依然会找到旧的Java9。
先验证问题根源
先分别查看普通用户和sudo下的Java路径,确认差异:
# 普通用户的Java路径(应该返回Java10) which java # sudo下的Java路径(会返回Java9) sudo which java
解决方案一:临时指定Java10路径执行
直接在sudo命令里明确指定JAVA_HOME,强制让javareconf使用Java10:
sudo JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home R CMD javareconf
执行完后,你可以打开R验证配置是否生效:
# 查看R识别的JAVA_HOME路径 Sys.getenv("JAVA_HOME") # 初始化Java环境 .jinit() # 查看当前Java版本 system("java -version")
输出应该显示Java10的版本信息。
解决方案二:永久让sudo保留用户PATH
如果不想每次都手动指定路径,可以修改sudo的环境变量配置,让它保留普通用户的PATH:
- 打开sudoers文件(必须用
visudo,避免编辑出错导致权限问题):
sudo visudo
- 在文件中添加或找到这一行:
Defaults env_keep += "PATH"
这行的作用是让sudo继承普通用户的PATH环境变量,保存退出后,下次再执行sudo R CMD javareconf就会自动使用Java10了。
内容的提问来源于stack exchange,提问作者lpuerto
相关产品推荐
相关产品推荐

