Bash에서 ‘2>> (command)’리디렉션의 의미 리디렉션이 작동하는 방식을 잊었습니다. 그것의

얼마 전에 스크립트를 작성하고 그 주위에 로깅을 추가했지만 로깅 리디렉션이 작동하는 방식을 잊었습니다.

그것의 요지는 :

#!/bin/bash

LOGFILE=/some/path/mylogfile

(
  # here go my commands which produce some stdout
  # and, if something goes wrong, also some stderr
) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 )

스크립트를 실행하면에 아무것도 인쇄되지 않고에 인쇄되는 stdout내용 만 인쇄됩니다 stderr. 로그 파일 ${LOGFILE}은 stdout과 stderr을 모두 캡처합니다.

스크립트를 실행하고 터미널에 출력이 없으면 모든 것이 정상임을 알 수 있습니다. 출력이 있으면 문제가 있음을 알고 로그 파일을 확인하여 문제가 무엇인지 알 수 있습니다.

지금 당황하는 방향 전환의 일부는 다음과 같은 구문입니다. 2> >( some command )

아무도 거기에서 무슨 일이 일어나고 있는지 설명 할 수 있습니까?



답변

>(...)프로세스 대체 라고 합니다 . “외부”프로그램이 마치 파일 인 것처럼 “내부”프로그램에 쓸 수 있습니다.

이 경우에는 쓰고 stderrtee -a ${LOGFILE} >&2에 추가되는 LOGFILE과에 다음도 쓰기 모든 것을 다시 stderr.

경로 재 지정 연산자는 프로세스 대체를 위해 어느 방향 으로든 이동할 수 있으므로이 예제와 같이 쓰거나 <(...)읽을 수 있습니다. 예를 들어 while서브 쉘에서 루프를 실행하지 않고 루프를 수행하는 편리한 방법 입니다. 그 자체.


답변