同时捕获输出行数和返回代码

ora*_*ius 4 bash

我正在编写一个 bash 脚本,它将调用一个程序(我们称之为 foo),该程序返回一些输出,并给出返回代码。我关心程序的返回码和输出的行数(但不关心输出本身)。由于该程序涉及通过互联网检索数据,因此我不希望调用它两次(特别是,如果两次调用中只有一次由于暂时性网络问题或类似问题而失败,则可能会导致问题)。我能想到的捕获输出行数和返回代码的最佳脚本如下。还有更优雅的吗?

#!/bin/bash
line=$(foo | wc -l; echo ${PIPESTATUS[0]})
line=$(echo line | tr '\n' ' ')
lineCount=$(echo line | awk '{ print $1}')
returnCode=$(echo line | awk '{ print $2}')
Run Code Online (Sandbox Code Playgroud)

Phi*_*ipp 5

例如:

set -o pipefail
lineCount=$(foo | wc -l)
returnCode=$?
Run Code Online (Sandbox Code Playgroud)

这假设wc永远不会失败,否则您将获得wc的退出状态。

另一种不依赖于这个假设的方法:

set +o pipefail
lineCount=$(foo | wc -l ; exit "${PIPESTATUS[0]}")
returnCode=$?
Run Code Online (Sandbox Code Playgroud)