중복 가능성:
화면에 stderr만 표시하고 stdout 및 stderr을 파일에 씁니다.
stdout, stderr 및 로깅에 스크립트 명령 사용
cattest.sh:
rm -v foo.tmp
date
pwd
cattest2.sh:
script bar.log -c './test.sh'
test2.sh를 실행할 때 터미널에 다음이 표시될 것으로 예상됩니다.
Fri Feb 17 18:04:30 PST 2012
/home/me/me
하지만 bar.log에서 나는 다음을 보고 싶습니다:
removed 'foo.tmp'
Fri Feb 17 18:04:30 PST 2012
/home/me/me
또는 (foo.tmp가 존재하지 않는 경우)
rm: cannot remove 'foo.tmp'
Fri Feb 17 18:04:30 PST 2012
/home/me/me
이것이 가능한가?
답변1
script
임시 터미널의 모든 출력이 수집되고 자체 표준 출력이 해당 터미널에 표시되기 때문에 이를 직접 수행하기는 어렵습니다 .
에서는 test.sh
터미널에 표시하려는 메시지와 기록에만 표시하려는 메시지를 구별할 수 있는 방법이 필요합니다. 예를 들어 각 줄에 접두사를 추가하여 중요도 수준을 나타냅니다. 예제의 다른 줄은 로 시작하지 않으므로 @
중요하지 않은(기록 전용) 줄 앞에 를 붙입니다 @
.
rm -v foo.tmp | sed 's/^/@/'
date
pwd
래퍼 스크립트에서:
script bar.log -c './test.sh | grep -v "^@"'
유틸리티를 수정하지 않고는 이보다 더 나은 결과를 얻을 수 없을 것 같습니다 script
. (이 경로로 가고 싶다면 가장 쉬운 방법은 몇 줄이면 충분할 것 같습니다 expect
.)