【发布时间】:2020-05-24 08:10:19
【问题描述】:
在 macos catalina 上 '''回显 $VARIABLE'''
在 linux 中没有问题,所以我认为这是一个 zsh 问题。
Java 读取所有变量 env,除了 LD_LIBRARY_PATH 和 DYLD_LIBRARY_PATH
【问题讨论】:
标签: java macos environment-variables zsh
在 macos catalina 上 '''回显 $VARIABLE'''
在 linux 中没有问题,所以我认为这是一个 zsh 问题。
Java 读取所有变量 env,除了 LD_LIBRARY_PATH 和 DYLD_LIBRARY_PATH
【问题讨论】:
标签: java macos environment-variables zsh
我相信进程中的任何给定环境变量不一定会复制到从它派生的任何进程。
所以,在这里,你的 zsh 进程显然有 LD_LIBRARY_PATH 环境变量,但你的 java 进程没有。
如果你这样设置:
LD_LIBRARY_PATH=/Applications/blabla
你会得到这种行为。您正在寻找:
export LD_LIBRARY_PATH=/Applications/blabla
【讨论】:
java 可执行文件(运行which java)。它可能是一个在运行真正的java 之前设置LD_LIBRARY_PATH 的shell 脚本。
如果启用了系统完整性保护 (SIP),则变量 LD_LIBRARY_PATH / DYLD_LIBRARY_PATH 不会传递到 macOS 上的子进程环境。
确认:
#!/bin/zsh
cat << EOF > EnvDemo.java
public class EnvDemo {
public static void main(String[] args) throws Exception {
System.out.println(System.getenv("LD_LIBRARY_PATH"));
System.out.println(System.getenv("DYLD_LIBRARY_PATH"));
System.out.println(System.getenv("PATH"));
System.out.println(System.getenv("CUSTOM_FLAG"));
}
}
EOF
javac EnvDemo.java
export LD_LIBRARY_PATH=/usr/local/library
export DYLD_LIBRARY_PATH=/usr/local/library
export CUSTOM_FLAG=custom_flag
java EnvDemo
# null
# null
# /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/oracle-19-5
# custom_flag
echo "env | grep LD_LIBRARY_PATH"
env | grep LD_LIBRARY_PATH
# No output here
echo "env | grep DYLD_LIBRARY_PATH"
env | grep DYLD_LIBRARY_PATH
# No output here
【讨论】: