【发布时间】:2015-06-05 04:16:25
【问题描述】:
我注意到通常在制作 .sh 文件时,我们会编辑文件的可执行标志
$ chmod +x <sth>.sh
但是没有那个可执行标志,.sh 文件可以是可执行的。
$ sh ./<sth>.sh
为什么我们需要 chmod?
祝你有美好的一天!
【问题讨论】:
-
可执行文件定义命令,UNIX中的命令名不应该有扩展名。你运行
ls,而不是ls.elf,所以它也应该是sth,而不是sth.sh。 -
...无论如何,
sh sth.sh不执行脚本;它执行sh,它读取脚本,但不以操作系统关心的任何方式执行它(没有execv-series 调用);因此不需要执行权限。 -
@CharlesDuffy 谢谢,我明白.. 但是,我理解 chmod 和执行具有广泛的功能是正确的吗?
-
我不确定在这种情况下我是否理解“广泛功能”的含义。如果您的意思是它是更灵活的方法,那将是准确的 --
sh foo只有在foo是为与 POSIX sh 基线规范兼容而编写的脚本时才能确保工作,而./foo将工作bash 脚本、ksh 脚本,甚至是 Python 或 Perl 脚本,通过尊重它们的 shebang 行来选择编写这些脚本的解释器。 -
@charles 是的,这就是我的意思,非常感谢!这就是我在这里提问的原因
标签: shell sh executable chmod