Bash 始终在一行中执行两个(或多个)命令,但返回第一个命令的退出状态

Bash 始终在一行中执行两个(或多个)命令,但返回第一个命令的退出状态,bash,Bash,是否可以在一行中执行2个或多个命令,但返回bash中第一个命令的状态 我在Docker build中有以下步骤: RUN bin/myserver && cat tmp/log && rm -rf tmp 在我的docker构建中运行这个过程是很重要的,并且在之后进行清理以删除不需要的东西以存储为docker层是很有意义的 myserver将日志记录到日志文件中,而不是控制台输出,因此我需要对日志进行cat以了解发生了什么,尤其是在出现故障的情况下 如何将这些内

是否可以在一行中执行2个或多个命令,但返回bash中第一个命令的状态

我在Docker build中有以下步骤:

RUN bin/myserver && cat tmp/log && rm -rf tmp
在我的docker构建中运行这个过程是很重要的,并且在之后进行清理以删除不需要的东西以存储为docker层是很有意义的

myserver将日志记录到日志文件中,而不是控制台输出,因此我需要对日志进行cat以了解发生了什么,尤其是在出现故障的情况下


如何将这些内容组合在一起?

您可以使用2>重定向命令的stderr

要忽略错误,可以将其重定向到/dev/null:2>/dev/null

因此,您的命令行变成:

RUN bin/myserver && cat tmp/log 2> /dev/null && rm -rf tmp 2> /dev/null
那么:

RUN sh -c 'bin/myserver; status=$?; cat tmp/log; rm -rf tmp; exit $status'

我不确定您是否理解
&&
操作员在这里做什么。将命令与
&&
链接意味着只有当左侧命令返回
0
时,才会执行右侧命令。因此,如果
bin/myserver
失败,因此返回的不是
0
,那么
cat
将不会运行,因此无法记录原因。为什么不在需要调试时将
tmp/log
装载为卷?@TomFenech docker构建在gitlab构建中运行,如果一个失败的命令停止了整个构建,那么以后我就没有用了。我需要以单行程序的方式执行此操作,
bni/myserver
是否作为守护进程运行(因此,该命令会在服务器在后台运行时立即退出)?或者,在正常情况下,它会退出吗?@glennjackman这让我担心,如果我要发布我为什么需要这种行为的细节,以防止离题。当它在构建期间完成工作时,它将退出。我想你误解了我的意思。我的myserver记录到文件,而不是stderr/stdin。它会以错误状态失败,所以在失败的情况下不会调用第二个命令。我自己尝试过“退出$status”,但我被抛出了壳;)