Ich bereitete eine neue Maschine für die Entwicklung vor und aktualisierte Cygwin und den CVS-Client wie in der Betreffzeile beschrieben: von (Cygwin 1.5.5-1 + CVS 1.11.21) auf (Cygwin-1.7.5 + CVS 1.11.22)
Alles ist gut gelaufen, aber ein einzeiliges Convenience-Bash- Skript, das ich seit Jahren bei mir habe, funktioniert nicht mehr. Es wurde verwendet, um alle uninteressanten Zeilen aus "cvs status" herauszufiltern:
cvs status | grep -F File | grep -v Up-to-date
In der neuen Version schien "grep -v" einfach nicht mehr zu funktionieren (dh es wurde nichts herausgefiltert). Also habe ich versucht:
cvs status 2>&1 | grep -F File | grep -v Up-to-date
Daran hat sich aber nichts geändert. Die Ausgabe war immer noch so, als würde "grep -v" nie aufgerufen. Also habe ich versucht:
cvs status 2>&1 | grep -F File 2>&1 | grep -v Up-to-date
Und das löste das Problem! Das Skript verhält sich jetzt identisch in (Cygwin 1.5.5-1 + CVS 1.11.21) und (Cygwin-1.7.5 + CVS 1.11.22).
Meine Frage ist jetzt warum?
Was ist mit Cygwins Grep passiert, dass jetzt eine Umleitung von stderr zu stdout erforderlich ist?
Bitte beachten Sie, dass ich das Wort script absichtlich hervorgehoben habe , da der ursprüngliche Befehl (der erste oben genannte) in alten und neuen Umgebungen immer noch identisch funktioniert, wenn er über die Befehlszeile eingegeben wird (dh nicht in einem #! / Bin / bash-Skript). .
Irgendeine Idee warum das so ist?