./script.sh和sh script.sh之间的区别

13 浏览
0 Comments

./script.sh和sh script.sh之间的区别

我用默认权限-rw-r--r-- 1编写了一个脚本。如果我运行这个sh script.sh,它会被执行,而使用./script执行时会报权限被拒绝的错误。

这两个命令之间有什么区别?

为什么对于'sh script.sh'不需要改变权限?

[root@ip safe]# sh test.sh

test

[root@ip safe]# ./test.sh

-bash: ./test.sh: Permission denied

0
0 Comments

"./script.sh"和"sh script.sh"之间的区别是什么?

"sh script.sh"命令告诉"sh"程序运行脚本。

"./script.sh"命令告诉系统使用脚本定义的程序来运行脚本(或者如果没有定义程序,使用默认的shell来运行)。

需要注意的是,根据脚本是否有hashbang,可能会得到完全不同的结果,原因如下:

即使"sh"是"bash",当以"sh"的形式调用时,它会以有限的兼容模式运行(感谢Charles Duffy在问题的评论中指出这一点)。

脚本可能使用与shell完全不同的东西来运行。它可能以"#!/bin/node"开头,并包含在Node.js中运行的JavaScript代码。在这种情况下,"./script.sh"将会成功运行,但"sh script.sh"将会失败,因为"sh"将把脚本视为shell脚本。

为什么对于"sh script.sh"不需要更改权限?

这是因为在这种情况下,你执行的是标记为可执行的"sh"程序("sh"程序读取并执行脚本中的命令,但脚本本身不需要具有可执行权限)。当你执行"./script.sh"时,你将其视为可执行文件,因此需要设置可执行权限位。

0