【问题标题】:What does the line '!/bin/sh -e' do? [closed]'!/bin/sh -e' 行有什么作用? [关闭]
【发布时间】:2010-05-29 19:16:47
【问题描述】:

在我的服务器 (linux) 上的文件的开头,该文件位于 /etc/init.d/ 文件夹中,我有这一行:

 !/bin/sh -e

这是什么意思,因为每次我执行脚本的其余部分时它都可以正常工作,除了显示以下错误:

 !/bin/sh not found

有什么想法吗?

【问题讨论】:

  • 到目前为止,还没有人处理 -e,这似乎不是我 MacBook 上 bash 接受的标志。
  • @dmckee: sh != bash。 man sh(或man dash)显示-e errexit: If not interactive, exit immediately if any untested command fails...
  • 顺便说一下@Camran,它仍然在没有修复shebang行的情况下运行的原因可能是因为您直接调用了shell解释器,例如sh myScript。使用 shebang 行,您可以使用 chmod +x... 将文件设置为可执行并在不显式调用解释器的情况下运行它。
  • @Mark:我知道。但是 Mac OS X 没有普通的 bourne shell,而且我手边也没有 linux 盒子……

标签: linux shell


【解决方案1】:

该行定义了执行给定脚本的程序。 对于sh,通常该行应该以 # 字符开头,如下所示:

#!/bin/sh -e

-e 标志的长名称是errexit,导致脚本在第一个错误时立即退出。更详细的描述来自man sh

如果不是交互式的,如果任何未经测试的命令失败,则立即退出。如果该命令用于控制ifelifwhileuntil,则认为该命令的退出状态是显式测试的;或者如果命令是 &&|| operator 的左侧操作数。

【讨论】:

  • 这应该是公认的答案。最佳答案充其量是一个错字评论。
【解决方案2】:
 #!/bin/bash   

这是脚本中告诉系统使用 bash shell 执行脚本的第一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 2013-06-12
    • 1970-01-01
    • 2021-06-25
    • 2019-04-29
    • 2015-05-18
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多