(Cygwin 1.5.5-1 + CVS 1.11.21) по сравнению с (cygwin-1.7.5 + CVS 1.11.22)

Готовя новую машину к разработке, я обновил Cygwin и клиент CVS, как описано в строке темы: от (Cygwin 1.5.5-1 + CVS 1.11.21) к (cygwin-1.7.5 + CVS 1.11.22)

Все подходили, но сценарий удара удобства с 1 строкой, который я нес вокруг в течение многих лет, прекратил работать. Это раньше отфильтровывало все неинтересные строки от 'cvs состояние':

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).

Мой вопрос теперь состоит в том почему?

Что произошло с grep Cygwin, что он теперь требует перенаправления от stderr до stdout?

Обратите внимание на то, что я намеренно подчеркнул сценарий слова, потому что исходная команда (первая, заключенная в кавычки выше) все еще, работает тождественно и в старых и в новых средах, если введено из командной строки (т.е. не в #!/bin/bash сценарий).

Какая-либо идея, почему это?

1
задан 02.09.2010, 08:01

2 ответа

Пора принять ответ. Единственное разумное объяснение до сих пор состоит в том, что что-то изменило в них способ, которым grep Cygwin разделяет вывод к stderr и stdout. Если лучший или более авторитетный ответ придет, то я рассмотрю принятие его.

0
ответ дан 17.12.2019, 00:35

Я не знаю наверняка в этом случае, но частой причиной сценариев, не удающихся работать с более новыми версиями удара Cygwin, является DOS (CR-LF) окончания строки. Возможно, Ваше последнее изменение в том сценарии также изменило окончание строки. Удостоверьтесь, что Ваши сценарии используют только Unix (LF) окончания строки. Иначе grep будет рассматривать свой аргумент шаблона как "Up-to-date^M".

1
ответ дан 17.12.2019, 00:35

Теги

Похожие вопросы