Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell sh文件更改可执行文件(chmod&x2B;x)和不更改有什么区别?_Shell_Sh_Executable_Chmod - Fatal编程技术网

Shell sh文件更改可执行文件(chmod&x2B;x)和不更改有什么区别?

Shell sh文件更改可执行文件(chmod&x2B;x)和不更改有什么区别?,shell,sh,executable,chmod,Shell,Sh,Executable,Chmod,我注意到,通常在创建.sh文件时,我们会编辑文件的可执行标志 $ chmod +x <sth>.sh $chmod+x.sh 但是如果没有可执行标志,.sh文件可以执行 $ sh ./<sth>.sh $sh./.sh 为什么我们需要chmod 祝你今天愉快 通过使用chmod并启用执行权限,您可以使用 <sth>.sh 这意味着运行sh命令,该命令将读取.sh文件,然后对其进行解释,因此您不需要执行权限。如果您不向该文件授予可执行权限,则必须说明

我注意到,通常在创建.sh文件时,我们会编辑文件的可执行标志

$ chmod +x <sth>.sh
$chmod+x.sh
但是如果没有可执行标志,.sh文件可以执行

$ sh ./<sth>.sh
$sh./.sh
为什么我们需要chmod


祝你今天愉快

通过使用
chmod
并启用执行权限,您可以使用

<sth>.sh 

这意味着运行
sh
命令,该命令将读取.sh文件,然后对其进行解释,因此您不需要执行权限。

如果您不向该文件授予可执行权限,则必须说明要使用哪个二进制文件来运行文件

例如,您必须像这样运行文件

sh example.sh


但是,当您授予文件可执行权限时,您可以将文件作为./example.sh

运行,
sh
命令仅适用于POSIX脚本。对于bash脚本,
bash
;对于ksh脚本
ksh
,等等。否则,如果提供
sh
的解释器没有提供脚本所需的功能,您将得到错误。(即使
/bin/sh
是由
bash
提供的,它在兼容模式下运行,以这种方式运行时会关闭许多非POSIX功能)。@bkmoney谢谢!,我不太明白。。。unix系统对于可执行文件定义命令来说太复杂了,unix中的命令名不应该有扩展名。您运行的是
ls
,而不是
ls.elf
,因此它同样应该是
sth
,而不是
sth.sh
…无论如何,
sh sth.sh
不会执行脚本;它执行
sh
,读取脚本,但不以操作系统关心的任何方式执行脚本(无
execv
-系列调用);因此不需要执行权限。@charlesduff谢谢,我理解。。但是,我所理解的chmod和execution具有广泛的功能是对的吗?我不确定我理解“广泛的功能”在本文中的含义。如果您的意思是这是一种更灵活的方法,那么这将是准确的--
sh foo
只有在
foo
是一个为兼容POSIX sh基线规范而编写的脚本时才肯定有效,而
/foo
将适用于bash脚本、ksh脚本,或者甚至是一个Python或Perl脚本,通过尊重他们的shebang行来选择这些脚本的解释器。@charles是的,这就是我的意思,真的谢谢!这就是我在这里提问的原因谢谢,祝你愉快!
 sh <sth>.sh