파이프 STDOUT 및 STDERR을 통해 각각

파이프 STDOUT 및 STDERR을 통해 각각

test1다음과 같은 stdout출력을 생성하는 함수가 있습니다 stderr.

test1() {
    echo "out 1"
    sleep 0.1

    echo "error 1" 1>&2
    sleep 0.1

    echo "out 2"
    sleep 0.1

    echo "error 2" 1>&2
    sleep 0.1
}

그러면 두 개의 별칭이 있습니다체재 stdin다음 주소로 보내세요 stdout.

alias o='sed -E "s/^/O /"'
alias e='sed -E "s/^/E /"'

두 개의 스트림을 및 test1로 파이프하여 및 에서 형식화된 출력으로 끝내는 방법은 무엇입니까 ? 저는 Alpine Linux에서 Bash를 사용하고 있으므로 GNU 유틸리티는 옵션이 아닙니다.oestdoutstderr

내 추론은 다음과 같지만 구문론적으로 실행하는 방법을 모르겠습니다.

  1. errout에 보냅니다 .out3
  2. 실행 in, e전송 err3수신 out.
  3. 달려가서 서둘러 in처리하세요 o.
  4. 이익?

답변1

bash를 사용하여 이 작업을 수행할 수 있습니다.프로세스 대체:

stdout 파이프에서 선택되지 않도록 하려면 stderr로 다시 리디렉션해야 합니다.

$ perl -E '{*STDOUT} "안녕하세요"라고 말하세요. {*STDERR} ​​​​"안녕"이라고 말하세요.' \
        >>(sed s/^/out:/) \
       2>>(sed s/^/오류:/>&2)

관련 정보