什么是'设置-x'在Dockerfile中做什么?

时间:2017-11-06 18:22:30

标签: docker

我正在从现有的Dockerfile学习,开始创建自己的Dockerfile。我注意到大多数时候,命令都以

开始
RUN set -x ...

RUN set -ex; ...

为什么这样做,为什么这是必要的?有必要吗?

1 个答案:

答案 0 :(得分:11)

-e导致命令停止任何错误。更典型的语法是使用&&分隔命令以停止任何错误。

-x导致shell输出正在运行的每个命令。这对于调试脚本非常有用。

来自set下的bash手册页:

  

-e如果管道(可能由一个管道组成)立即退出   单个简单命令),列表或者             复合命令(参见上面的SHELL GRAMMAR),以非零状态退出。外壳确实如此             如果失败的命令在一段时间后立即成为命令列表的一部分,则不退出             或直到关键字,if或elif保留字后面的测试的一部分,任何com-的一部分             在&&和或||列表除了最后一个&&之后的命令或||,任何命令             在管道中但是最后一个,或者如果命令的返回值与!相反。如果一个             子shell以外的复合命令返回非零状态,因为命令失败             当-e被忽略时,shell不会退出。 ERR上的陷阱(如果已设置)将被执行             在shell退出之前。此选项适用于shell环境和每个子shell环境             单独使用ronment(参见上面的COMMAND EXECUTION ENVIRONMENT),并可能导致子shell退出             在执行子shell中的所有命令之前。

     

如果复合命令或shell函数在忽略-e的上下文中执行,则为none   复合命令或函数体内执行的命令将受到影响   -e设置,即使设置了-e并且命令返回失败状态。如果是复合命令   或shell函数集-e在忽略-e的上下文中执行时,该设置将   在复合命令或包含函数调用的命令之前没有任何影响   完成。

     

...

     

-x扩展每个简单命令后,对于命令,case   命令,选择命令或算术             对于命令,显示PS4的扩展值,然后是命令及其扩展             参数或相关单词列表。