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 유틸리티는 옵션이 아닙니다.o
e
stdout
stderr
내 추론은 다음과 같지만 구문론적으로 실행하는 방법을 모르겠습니다.
err
와out
에 보냅니다 .out
3
- 실행
in
,e
전송err
및3
수신out
. - 달려가서 서둘러
in
처리하세요o
. - 이익?
답변1
bash를 사용하여 이 작업을 수행할 수 있습니다.프로세스 대체:
stdout 파이프에서 선택되지 않도록 하려면 stderr로 다시 리디렉션해야 합니다.
$ perl -E '{*STDOUT} "안녕하세요"라고 말하세요. {*STDERR} "안녕"이라고 말하세요.' \ >>(sed s/^/out:/) \ 2>>(sed s/^/오류:/>&2)