쉘 명령의 출력을 숨기려면 일반적으로 stderr 및 stdout을 경로 재지 정해야합니다. 기본적으로 출력을 숨기지 만 오류시 누적 된 모든 출력을 덤프하는 내장 기능 또는 명령이 있습니까? 이것을 원격 ssh
명령 의 래퍼로 실행하고 싶습니다 . 이제 리디렉션을 사용하고 있지만 실패한 원인에 대한 단서가 없으며 너무 자세합니다.
편집 : 결국 @Belmin의 답변을 기반으로 스크립트에서 이전 명령을 모두 누적하고 현재 프로세스 식별자를 사용하고 로그를 자동으로 제거하고 실패 빨간색 오류를 추가하기 위해 약간의 조정을 바탕으로 다음 템플릿을 만들었습니다. 무언가 잘못되었을 때 메시지. 이 템플리트에서 초기 silent
랩퍼는 성공한 후 디렉토리가 이미 존재하므로 세 번째 명령이 실패합니다.
#!/bin/sh
set -e
SILENT_LOG=/tmp/silent_log_$$.txt
trap "/bin/rm -f $SILENT_LOG" EXIT
function report_and_exit {
cat "${SILENT_LOG}";
echo "\033[91mError running command.\033[39m"
exit 1;
}
function silent {
$* 2>>"${SILENT_LOG}" >> "${SILENT_LOG}" || report_and_exit;
}
silent mkdir -v pepe
silent mkdir -v pepe2
silent mkdir -v pepe
silent mkdir -v pepe2
2>&1
다음과 같은 것을 사용해야한다고 생각했다 .$* >>"${SILENT_LOG}" 2>&1" || report_and_exit