Shell sh文件更改可执行文件(chmod&x2B;x)和不更改有什么区别?
我注意到,通常在创建.sh文件时,我们会编辑文件的可执行标志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文件,然后对其进行解释,因此您不需要执行权限。如果您不向该文件授予可执行权限,则必须说明
$ 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