![Bash 返回第一个失败进程的标准错误](https://linux22.com/image/1401411/Bash%20%E8%BF%94%E5%9B%9E%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%A4%B1%E8%B4%A5%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%A0%87%E5%87%86%E9%94%99%E8%AF%AF.png)
我需要运行一些命令,如果其中任何一个失败,我想用它的 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
$