Готовя новый компьютер к разработке, я обновил Cygwin и клиента CVS, как описано в строке темы: с (Cygwin 1.5.5-1 + CVS 1.11.21) до (cygwin-1.7.5 + CVS 1.11.22)
Все прошло хорошо, но 1-строчный удобный 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).
Мой вопрос сейчас почему?
Что случилось с greg Cygwin, что теперь требуется перенаправление с stderr на stdout?
Обратите внимание, что я намеренно выделил слово script, потому что исходная команда (первая, приведенная выше) по-прежнему одинаково работает как в старой, так и в новой среде, если она набирается из командной строки (то есть не внутри #!/bin/bash script).
Есть идеи, почему это так?