Stderr 리디렉션이 작동하지 않습니다.

Stderr 리디렉션이 작동하지 않습니다.

mbuffer 명령에서 stderr을 파일로 리디렉션하려고 합니다. 작동하지 않습니다. stderr 출력이 여전히 화면에 나타나고 오류.txt가 비어 있습니다. 내 명령은 다음과 같습니다.

$ raspivid -w 1280 -h 720 -o - | mbuffer -m 60M -f -o /tmp/temp_video.h264 2> errors.txt &
[2] 5278
in @ 1006 KiB/s, out @ 1006 KiB/s, 9292 KiB total, buffer   0% full^C
in @  0.0 KiB/s, out @  0.0 KiB/s,  9.9 MiB total, buffer  17% full^C

참고로, 리디렉션하려는 stderr 출력은 "@ 1006KB/s...."입니다.

내가 뭘 잘못했나요? 감사해요!

답변1

너는 아무 잘못도 하지 않았어mbuffer /dev/tty표준 오류를 읽을 수 없으면 다시 엽니다., 리디렉션을 무효화하세요.

-q옵션을 사용하여 상태 출력을 비활성화할 수 있습니다. 문서에 따르면 다음 을 사용하여 -l상태를 파일에 기록 할 수 있습니다.

mbuffer -m 60M -f -o /tmp/temp_video.h264 -l errors.txt &

하지만 상태 로그에 오류가 있습니다.항상 표준 오류가 발생합니다, 로그가 아닙니다.

이 문제를 해결하는 방법은 다음과 같습니다.

  1. 패키지 소스 코드 다운로드

    apt-get source mbuffer
    
  2. 패치 추가(패키지 필요 quilt)

    cd mbuffer-20161115
    quilt new 13-status-log.patch
    quilt add mbuffer.c
    
  3. mbuffer.c461(Debian 8) 또는 472(Debian 9) 행을 편집하여 다음으로 변경합니다.

    nw = write(Log,buf,strlen(buf));
    
  4. 패치 저장

    quilt refresh
    
  5. 패키지 재구축(이것은 필요 dpkg-dev하고 devscripts패키지입니다)

    dch -n "Fix the status log to honour the -l option."
    dch -r ignored
    dpkg-buildpackage -us -uc
    

    ( dpkg-buildpackage종속성 누락에 대해 불평하는 경우 해당 종속성을 설치하고 다시 시도하세요.)

  6. 업데이트된 패키지 설치

    sudo dpkg -i ../mbuffer_*-?.1_*.deb
    

답변2

저는 mbuffer의 작성자이고 상태 로그에 오류가 없다는 점을 지적하고 싶었습니다. 목표는 항상 로그에 상태 메시지를 기록하는 것을 방지하는 것입니다. 로그가 손상되고 사용자가 명시적으로 요청하지 않는 한 읽을 수 없게 되기 때문입니다.

이는 "-v 4"를 사용하여 자세한 정보를 레벨 4로 증가시켜 수행됩니다.

기본 동작은 혼란을 야기하고 로그에 상태 메시지를 표시하지 않는 -Q 옵션도 있으므로 향후 릴리스에서는 로그에 상태 메시지를 상세 수준 3으로 포함하는 것을 고려하고 있습니다.

인사,

도마

관련 정보