我的目标是调用一个命令,在一个变量中获取 stderr,但在屏幕上保留 stdout(并且只有 stdout)。是的,这与大多数人所做的相反:)
目前,我拥有的最好的是:
#!/bin/bash
pull=$(sudo ./pull "${TAG}" 2>&1)
pull_code=$?
if [[ ! "${pull_code}" -eq 0 ]]; then
error "[${pull_code}] ${pull}"
exit "${E_PULL_FAILED}"
fi
echo "${pull}"
Run Code Online (Sandbox Code Playgroud)
但这只能在成功的情况下显示标准输出,并且在命令完成后。我想直播标准输出,这可能吗?
编辑
感谢@sebasth,并在没有临时文件的情况下将 STDERR 和 STDOUT 重定向到不同变量的帮助下,我写了这个:
#!/bin/bash
{
sudo ./pull "${TAG}" 2> /dev/fd/3
pull_code=$?
if [[ ! "${pull_code}" -eq 0 ]]; then
echo "[${pull_code}] $(cat<&3)"
exit "${E_PULL_FAILED}"
fi
} 3<<EOF
EOF
Run Code Online (Sandbox Code Playgroud)
我承认这不是真正的“美丽”,看起来很棘手,而且我真的不明白为什么需要heredoc ......
这是实现这一目标的更好方法吗?