在运行 Bash 5.1.4(1) 的 dockerized Alpine 3.14.2 中,我在 Bash 脚本中遇到了奇怪的行为。最重要的是测试文件的可执行性,但总是失败。简而言之,这是 if 测试:
bash-5.1# if [ ! -x /opt/java/openjdk/bin/java ]; then echo "something strange just happened"; fi
something strange just happened
Run Code Online (Sandbox Code Playgroud)
但是,我所知道的多种“测试”可执行性的方法都显示出不同的结果:
bash-5.1# ls -la /opt/java/openjdk/bin/java
-rwxr-xr-x 1 root root 12648 Jan 21 2021 /opt/java/openjdk/bin/java
bash-5.1# stat -c "%A" /opt/java/openjdk/bin/java
-rwxr-xr-x
bash-5.1# /opt/java/openjdk/bin/java --version
openjdk 15.0.2 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.2+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.2+7, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
为了让我的脚本正常工作,Bash 内的可执行性测试应该返回正确的结果。但为什么不呢?
我检查或尝试过一长串内容,其中一些是根据社区的建议进行的:
bash-5.1# …Run Code Online (Sandbox Code Playgroud)