2
다음을 수행하고 싶습니다.Bash - stdout을 로그로 리디렉션하고 stderr 만 로그로 기록하십시오.
- stdout 복사본을 로그 파일로 리디렉션하고 화면에 stdout을 유지합니다.
- 표준 오류를 동일한 로그 파일로 리디렉션하고 화면에 표시하지 않습니다. 표준 출력없이
코드 화면합니다 :
#!/bin/bash
exec 1> >(sed -u 's/^/INF: /' >> common.log)
exec 2> >(sed -u 's/^/ERR: /' >> common.log)
echo "some txt"
echo "an error" >&2
echo "some more txt"
echo "one more error" >&2
로그인을 :
INF: some txt
INF: some more txt
ERR: an error
ERR: one more error
첫 번째 문제는 내가 나오지도 '-u'버퍼링을 위해 함께 부정하려 버퍼링 . 표준 출력과
코드을 선별 : 화면 매달려
#!/bin/bash
exec 1> >(sed -u 's/^/INF: /' | tee -a common.log)
exec 2> >(sed -u 's/^/ERR: /' >> common.log)
echo "some txt"
echo "an error" >&2
echo "some more txt"
echo "one more error" >&2
결과를합니다 (Ctrl-C로했다) 여전히 버퍼 로그인합니다. 제안?
주어진 명령에 대해 예, 그렇지만 전체 네임 스페이스가 exec를 사용하고 싶습니다. {} 또는 함수 자체에서 특정 섹션을 래핑하고 솔루션을 사용할 수는 있지만 이상적이지는 않습니다. – koola
나는 더 나은 대안이 없다는 것을 감안할 때 이것을 대답으로 표시하고 있습니다. – koola