개발을 위해 새 머신을 준비하면서 제목 줄에 설명 된대로 Cygwin 및 CVS 클라이언트를 (Cygwin 1.5.5-1 + CVS 1.11.21)에서 (cygwin-1.7.5 + CVS 1.11.22)로 업그레이드했습니다.
모든 것이 잘되었지만 몇 년 동안 가지고 다니는 한 줄 편의 bash 스크립트 가 작동을 멈췄습니다. 'cvs status'에서 모든 흥미없는 라인을 걸러내는 데 사용되었습니다.
cvs status | grep -F File | grep -v Up-to-date
새 버전에서는 "grep -v"가 작동을 멈춘 것처럼 보입니다 (즉, 아무것도 필터링하지 않은 것). 그래서 나는 시도했다 :
cvs status 2>&1 | grep -F File | grep -v Up-to-date
그러나 그것은 행동을 바꾸지 않았습니다. "grep -v"가 호출되지 않은 것처럼 출력이 계속되었습니다. 그래서 시도했습니다.
cvs status 2>&1 | grep -F File 2>&1 | grep -v Up-to-date
그리고 그것은 문제를 해결했습니다! 스크립트는 이제 (Cygwin에서 1.5.5-1 + CVS 1.11.21)에서 동일하게 동작하며 (Cygwin에서-1.7.5 + CVS 1.11.22).
내 질문은 지금 왜?
Cygwin의 grep은 stderr에서 stdout으로 리디렉션해야하는 상황은 무엇입니까?
명령 행에서 입력하면 (예 : #! / bin / bash 스크립트가 아닌 ) 원래 명령 (위의 첫 번째 명령)이 이전 환경과 새 환경 모두에서 동일하게 작동하므로 script 라는 단어를 의도적으로 강조했습니다 . .
이것이 왜 그런지 아십니까?