기본적으로 우리가 실행하면
foo(){
echo "myfoo"
}
표준 출력으로 이동합니다. 내 질문은 bash 스크립트 또는 기능을 사용하여 명령이 자동으로 stdout에 기록되지 않도록 장치를 변경하는 프로그래밍 방식이 있습니까?
어쩌면 다음과 같은 것일 수도 있습니다.
foo(){
mkfifo bar
exec 1<>bar
echo "myfoo" # this gets written to the bar named pipe?
}
그렇다면 stdout을 다른 곳으로 "재지시"할 수 있을까요?
답변1
이 기술은 트릭을 수행할 수 있습니다. 프로세스 대체를 사용하고 stderr만 프로세스에 보냅니다.
기본적으로 다음과 같이 호출합니다.
exec > $some_file
프로세스 대체를 사용하면 다음을 수행할 수 있습니다.
exec > >( while read line; do echo " stdout: $line"; done )
이는 모든 표준 출력이 터미널 대신 이 파일로 이동함을 의미합니다.