Shell 脚本不是通过“./”运行,而是通过“sh”运行

Shell 脚本不是通过“./”运行,而是通过“sh”运行

我以超级用户(即 root 用户)身份在 arm 目标板上运行脚本。但如果我使用以下语法运行该脚本,则不会执行

root@freescale$ ./Script.sh 
-sh: ./Script.sh: Permission denied

我已经使用 chmod 命令授予了读取和执行权限 (+rx)。执行“ls -l”命令时,我获得以下属性

root@freescale$ ls -l | grep Script.sh
-rw-rw-rw-    1 root     root          362 Jul  2 08:47 Script.sh

文件属性列中没有“x”,而 chmod 命令执行成功。另一方面,当我以以下方式运行此脚本时,它会运行

root@freescale$ sh Script.sh 

有人能帮我回答这种情况吗?

答案1

即使您的“chmod”返回成功,执行位实际上并没有打开,正如“ls”所示,因此我得出结论,有些东西明显阻止您更改文件系统上的文件模式。

“lsattr Script.sh”显示什么?

您能将脚本放入 RAM 驱动器或同一主机上的其他文件系统并再试一次吗?

答案2

您的脚本没有为任何人设置“执行”权限。请尝试:

chmod u+x Script.sh

并且该文件的所有者应该能够使用 ./Script.sh 启动它

相似地,

chmod g+x Script.sh
chmod o+x Script.sh

如果您希望允许组 (g) 或任何人 (o) 执行它,则可以工作。

答案3

该文件必须是“可执行的”才能使用 来执行./Script.sh

用于chmod +x Script.sh为该文件添加“执行”标志。

编辑

抱歉,我错过了您帖子中的一个重要细节,您已经这样做了,但没有效果……尝试chmod再次执行,然后立即执行echo $?以获取退出状态,这可能会有所帮助。

相关内容