使用 ksh“没有这样的文件”,但脚本使用 ksh -x 运行?

使用 ksh“没有这样的文件”,但脚本使用 ksh -x 运行?

我正在尝试在 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 编写并保存脚本。

相关内容