我需要运行一些命令,如果其中任何一个失败,我想用它的 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
$