Bash 返回第一个失败进程的标准错误

Bash 返回第一个失败进程的标准错误

我需要运行一些命令,如果其中任何一个失败,我想用它的 stderr 输出 JSON。

我有以下行:

OUT="$( (ssh internal "custom_script1" | custom_app1 2>&- | custom_script2) 2>&1)"

如果管道中断,则每个命令都会写入其 stderr,OUT 将有 2 行。我如何知道哪个命令导致失败并获取该命令的 stderr?

假设我无法通过 SSH 连接到内部,因此我只想打印 SSH stderr:

{
  "state": "failed",
  "reason": "Permission denied (publickey,password,keyboard-interactive)."
}

答案1

如果我理解正确的话,只需避免全局 2>1。

$ OUT="$( (ssh internal "custom_script1" | cut -f 1 2>&- | cut -f 2 2>&1) )"
ssh: Could not resolve hostname internal: nodename nor servname provided, or not known
$ echo $OUT
$

相关内容