프로세스 대체를 사용하고 stderr만 프로세스에 보냅니다.

프로세스 대체를 사용하고 stderr만 프로세스에 보냅니다.

나는 이것을 가지고있다:

exec > >( while read line; do echo " stdout: $line"; done )
exec 2> >( while read line; do echo " stderr: $line"; done )

echo "rolo"
>&2 echo "cholo"

스크립트를 실행하면 다음과 같은 출력이 생성됩니다.

stdout: 롤로
stdout: stderr: 촐로

라인을 교체하기 위해 어떻게 stderr를 두 번째 프로세스로 보낼 수 있습니까? 난 이해가 안 돼요.

왜 이런 일이 발생하는지 이해하지 못합니다.

표준 출력: rolo
표준 출력: stderr: cholo # 뭐 ㅋㅋ

답변1

잘못된 순서로 리디렉션을 설정했습니다. 두 번째 프로세스의 표준 출력 stderr:은 이후에 실행되므로 첫 번째 프로세스의 표준 출력을 대체합니다(접두사가 붙음 ).

이 시도:

exec 2> >( while read line; do echo " stderr: $line"; done )
exec > >( while read line; do echo " stdout: $line"; done )

echo "rolo"
echo "cholo" >&2

이 출력

 stderr: cholo
 stdout: rolo

나는 이것이 당신이 원하는 것이라고 생각합니다.

관련 정보