显示 $() 执行的输出

显示 $() 执行的输出

我有下面的命令,我曾经在没有 的情况下运行$(),但我必须这样做才能捕获远程脚本的返回代码。问题是现在我看不到命令​​输出,除非我cat看到。我可以在执行过程中看到输出吗?

set -o pipefail
COMMAND=$(ssh ${RMT_HOST} ${RMT_DIR}/${SCRIPT_NAME} ${ARGUMENTS} < /dev/null |& tee -a ${RMT_EXEC_LOG})
RETCODE=$?

编辑 只是为了清楚为什么我使用$() 这里是一个链接

答案1

如果你的问题是实际上问题是“我如何捕获和显示进程的输出?”,您在正确的轨道上tee,但正如其他人所指出的,如果您稍后通过检查查看退出代码$?,您将获得退出命令的代码tee和非命令的代码都通过它运行。

存储输出并稍后查看很容易,但您需要立即捕获退出代码。那么,最好使用临时文件并单独处理输出:

scratch="$(mktemp)"
trap 'rm -fr "$scratch"' EXIT
--SOME LONG COMMAND-- > "$scratch"
returncode=$?
--HANDLER FOR RETURNCODE--
cat "$scratch" >> /path/to/persistent_logfile

相关内容