如果sudo后,某些命令在执行时无效,是由于sudo启用了非当前用户配置,而又没有完全启用root用户配置,从而导致某些命令无效。如export命令,从而导致环境变量无法设置成功。
解决办法是登录到完整的root用户再执行相应操作。
相关链接:在 Mac OS X 中启用和使用“root”用户
相关判定依据如下:
ZdeMacBook-Air:~ z$ cd /var/lib
ZdeMacBook-Air:lib z$ ls
postfix
ZdeMacBook-Air:lib z$ $APOLLO_HOME/bin/apollo create mybroker
Creating apollo instance at: mybroker
ERROR: mybroker/etc/log4j.properties (Permission denied)
ZdeMacBook-Air:lib z$ sudo $APOLLO_HOME/bin/apollo create mybroker
Password:
Error: JAVA_HOME is not defined correctly.
We cannot execute /System/Library/Frameworks/JavaVM.framework/Home/bin/java
ZdeMacBook-Air:lib z$
错误信息显示没有设置环境变量 JAVA_HOME,但实际上是有的:
ZdeMacBook-Air:lib z$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
虽然在 sudo echo $JAVA_HOME 时也能看到跟上面一样的结果,但是在 sudo env 的时候却没有:
ZdeMacBook-Air:lib z$ sudo env
TERM=xterm-256color
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.vGpiMArTtP/Listeners
__CF_USER_TEXT_ENCODING=0x1F5:0x19:0x34
LSCOLORS=GxFxCxDxBxegedabagaced
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
LANG=zh_CN.UTF-8
HOME=/Users/z
SHELL=/bin/bash
MAIL=/var/mail/root
LOGNAME=root
USER=root
USERNAME=root
SUDO_COMMAND=/usr/bin/env
SUDO_USER=z
SUDO_UID=501
SUDO_GID=20
ZdeMacBook-Air:lib z$
但是事实上我已经在/etc/profile里面配置了JAVA_HOME:
ZdeMacBook-Air:lib z$ cat /etc/profile
# System-wide .profile for sh(1)
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
if [ "${BASH-no}" != "no" ]; then
[ -r /etc/bashrc ] && . /etc/bashrc
fi
###############以下为新增###############
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
后来偶然发现sudo export并不起作用:
ZdeMacBook-Air:lib z$ sudo export jfskdjfladksjfksadjf=dsdjfls
Password:
sudo: export: command not found
启用并登录root用户后,圆满完成:
ZdeMacBook-Air:lib z$ su root
Password:
sh-3.2# cd /var/lib
sh-3.2# ls
mybroker postfix
sh-3.2# $APOLLO_HOME/bin/apollo create mybroker
Creating apollo instance at: mybroker
Generating ssl keystore...
You can now start the broker by executing:
"/private/var/lib/mybroker/bin/apollo-broker" run
Or you can run the broker in the background using:
"/private/var/lib/mybroker/bin/apollo-broker-service" start
sh-3.2#