나는 이것을 가지고있다:
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
나는 이것이 당신이 원하는 것이라고 생각합니다.