我有下面的命令,我曾经在没有 的情况下运行$()
,但我必须这样做才能捕获远程脚本的返回代码。问题是现在我看不到命令输出,除非我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