$() 실행의 출력 표시

$() 실행의 출력 표시

없이 실행했던 다음 명령이 있지만 $()원격 스크립트의 반환 코드를 캡처하려면 이 명령을 수행해야 합니다. 문제는 이제 내가 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

관련 정보