【问题标题】:set -e and set -x in shell script在 shell 脚本中设置 -e 和设置 -x
【发布时间】:2015-05-22 09:08:51
【问题描述】:

给予有什么不同

set -e set -x

set -xe

我收到了不同的回复。请帮我澄清一下

【问题讨论】:

  • 请编辑您的问题以包括实际测试用例或至少您在上面列出的每组得到的确切消息。祝你好运。

标签: linux shell command


【解决方案1】:

大概你在谈论 bash。根据其manual-e(参见4.3.1 部分)告诉 bash 在某些条件下退出(这可能适用于您的脚本)。如果是这种情况,“set -xe”可能会在退出前打印比“set -e”后跟“set -x”更多的跟踪信息。

【讨论】:

  • 实际上我遇到了失败,并且在 -xe 的情况下它会立即退出并且不执行它下面的代码行。但在其他情况下,会发生同样的故障,但它下面的代码行会执行!这是我的困惑!
  • 通过一个(简短的)脚本来演示这个问题,我们或许可以提供一些解释。 bash 文档使用“-e”提供了一些关于其行为的概述,但例如,如果脚本在某个复合语句中,bash 可能会等待执行跟踪,直到它完成替换并收集返回状态。
  • @ThomasDickey (i) 我在没有这三个参数的情况下调用这个脚本;我如何确定 nixOS 默认为它们提供什么? (ii) 你所说的“保持”论点是什么意思?你的意思是--keep-going
【解决方案2】:
set -x

在执行前打印 shell 命令。此功能可帮助程序员跟踪他们的 shell 脚本。

set -e

如果一个命令的返回码不为0且调用者没有检查,shell脚本将退出。此功能使 shell 脚本更加健壮。

set -eset -x经常出现在shell脚本的头部:

set -x
set -e

echo "I am a shell script."

或者作为shell命令使用:

sh -xe shell_script.sh

参考:http://julio.meroh.net/2010/01/set-e-and-set-x.html

【讨论】:

    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 2015-07-25
    • 2016-05-07
    • 1970-01-01
    • 2013-05-08
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多