표준 출력 억제

표준 출력 억제

이것은 쉘 스크립트의 내 명령입니다. 모든 출력을 표준 로그 파일로 리디렉션하고 싶습니다. 디렉터리나 하위 디렉터리가 있는 *.txt 파일을 찾을 수 없는 경우 std 출력 화면에 o/p를 기록한다는 점을 제외하면 훌륭한 작업을 수행합니다. 이를 억제하고 로그 파일로 보내려면 어떻게 해야 합니까?

TOTALFILES=`ls $SOURCEDIR/$SOURCESUBDIR/*.txt| wc -l` >> $WORKDIR/$LOGFNAME

답변1

그것확실히"표준 출력에 o/p 쓰기". stderr그리고 파일에 표준 출력도 쓰지 않습니다 . 명령 대체를 사용하면 stdout을 변수에 쓰라고 지시하는 것입니다 TOTALFILES.

출력을 변수와 파일 모두로 이동하려면 다음을 사용해야 합니다 tee.

totalfiles=$(ls "${sourcedir}/${sourcesubdir}/"*.txt | wc -l | tee "${workdir}/${logfname}")

그러나 이는 stderr을 로그 파일로 보내지 않으며 다음을 수행할 수 있습니다.

totalfiles=$(ls "${sourcedir}/${sourcesubdir}/"*.txt 2>"${workdir}/${logfname}" | wc -l | tee "${workdir}/${logfname}")

stdin은 fd0
stdout은 fd1
stderr은 fd2

표준 출력 리디렉션:

foo > /path/file

이는 다음과 같습니다.

foo 1> /path/file

표준 오류 리디렉션:

foo 2> /path/file

둘 다 리디렉션하려면 다음을 수행하세요.

foo > /path/file 2>&1

리디렉션 순서가 중요합니다.

읽다: 3.6 리디렉션


&>Bash를 사용하면 다음 명령을 사용하여 이 시간을 단축할 수도 있습니다 .

foo &> /path/file

(변수 이름을 대문자로 사용하지 말아야 하며 대신 모든 변수를 인용하고 $( ... )백틱을 사용해야 합니다.

관련 정보