小编gen*_*gap的帖子

为什么 Bash 在 Alpine 3.14.2 中无法正确评估可执行位?

在运行 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 本身。结果总是错误的:
bash-5.1# …
Run Code Online (Sandbox Code Playgroud)

bash test alpine-linux

8
推荐指数
1
解决办法
1547
查看次数

标签 统计

alpine-linux ×1

bash ×1

test ×1