【问题标题】:What is difference .sh file to change executable (chmod +x) and not? [closed].sh 文件更改可执行文件(chmod +x)有什么区别? [关闭]
【发布时间】: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


【解决方案1】:

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

运行文件
<sth>.sh 

如果没有可执行权限,如果您有读取权限,您仍然可以运行脚本,但您必须使用解释器,例如 shbash

当你这样做时

 sh <sth>.sh

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

【讨论】:

  • sh 命令仅适用于 POSIX 脚本。对于 bash 脚本,bash;用于 ksh 脚本 ksh 等。否则,如果提供 sh 的解释器不提供脚本所需的功能,则会出现错误。
  • (即使/bin/sh 是由bash 提供的,它也会在兼容模式下运行,并且在以这种方式运行时会关闭许多非POSIX 功能)。
  • @bkmoney 谢谢!,我不太明白... unix 系统对我来说太复杂了
【解决方案2】:

当您不授予文件可执行权限时,您必须提及要使用哪个二进制文件运行文件。

例如,你必须像

这样运行文件

sh example.sh

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

【讨论】:

  • 谢谢,祝你有美好的一天!
猜你喜欢
  • 2018-07-02
  • 2014-04-30
  • 2023-03-20
  • 2011-12-27
  • 2014-08-30
  • 2010-09-09
  • 2019-04-09
  • 2013-09-06
  • 1970-01-01
相关资源
最近更新 更多