我正在尝试在 OpenBSD 5.7/amd64 上执行 shell 脚本。它是一个用于测试 FOSS 项目的测试脚本。 (OpenBSD 是我们的目标之一,因为它提供了一个开箱即用的古老编译器)。
当我尝试运行脚本时:
$ ./cryptest.sh
ksh: ./cryptest.sh: No such file or directory
但是,如果我添加-x
用于调试,则可以神奇地找到该脚本:
$ ksh -x ./cryptest.sh
+ TEST_RESULTS=cryptest-result.txt
+ ADD_CXXFLAGS=
+ uname -s
+ grep -i -c darwin
+ IS_DARWIN=0
+ uname -s
+ grep -i -c linux
+ IS_LINUX=0
+ uname -s
+ grep -i -c cygwin
+ IS_CYGWIN=0
+ uname -s
+ grep -i -c mingw
+ IS_MINGW=0
+ [ -z ]
+ [ 0 -ne 0 ]
+ [ 0 -ne 0 ]
+ [ 0 -ne 0 ]
+ [ 0 -ne 0 ]
+ -x c++ -dM -E -std=c++11 -
...
我用 .zip 解压了 ZIP -aoq
。我检查了所有权、权限等。我仔细dos2unix
检查了它。我什至提出go+rx
尝试运行它。我知道要检查的所有事情(很少)似乎都没有问题。
谁能解释一下发生了什么事吗?
答案1
您的 shell 尝试执行 cryptest.sh 的第一行 (shebang) 上指定的 shell,但失败。它能够很好地找到 ksh,然后能够执行您的脚本。
答案2
ksh
文件第一行的路径与ksh
系统中的路径不匹配。
编辑文件以反映实际情况,脚本将按预期启动。
答案3
如果您在 Windows 上开发,它可能来自您的 EOL 编码,您必须使用 Unix EOL 编写并保存脚本。