Який сенс перенаправляти вихід grep на / dev / null?


24

Розглянемо цей рядок:

${libdir}/bin/licenseTool check "${SERIAL}" "${VERSION}" "${PRODUCT}" ${libdir} | grep '^200' >/dev/null

Який сенс шукати шаблон у висновку, якщо результат цього буде викинутий?

Якщо, наприклад, такий рядок з'являється як останнє в скрипті bash, повертається його значення виходу абоненту сценарію або ігнорується? (Я роздумую над тим, чи можна вважати, що це робиться лише для побічних ефектів чи якимось чином повертається абоненту.)

Відповіді:


29

Ваша підозра є правильною; статус виходу останньої команди скрипту буде передано в середовище виклику. Таким чином, відповідь полягає в тому, що цей скрипт поверне статус виходу 0, якщо він grepузгоджується в даних, існує статус 1, якщо не було відповідності, і вихід 2, якщо сталася якась помилка.


27

Суть grepвикинутого пінгу - це те, що письменник хоче лише повернути статус grep. Він / Вона хоче лише знати, чи відповідає візерунок чи ні. У вашому випадку останній grepперевіряє, чи є вихідні дані попередньої команди, які рядки починаються з 200.

У сучасній системі POSIX ви можете це все робити з grep -q, не перенаправляючи на /dev/null:

... | grep -q '^200'

Зауважте, що використання grep -qмає незначний побічний ефект, дякуючи Стефану Шазеласу за те, що він вказав у своєму коментарі. grep -qвиходить, як тільки він знайде перший збіг, якщо licenseToolвсе-таки щось запише після завершення grep, він отримає ПІДПИС.


2
і grep -qвикористовує менше CPU
Skaperen

5
По ходу цих речей grep -qдодано порівняно недавно; > /dev/nullНатомість використовується багато сценаріїв, тому що це було все, що ви мали ще в крижаний період (тобто 1995 рік).
zwol

3
У вашому першому реченні не вистачає дієслова?
AL

Ще одна невідповідність між "grep -q" та "grep> / dev / null" з сторінки GNU: "Однак, якщо використовується -q або --quiet або --silent та вибрано рядок, статус виходу є 0, навіть якщо сталася помилка. "
Марк

якщо документація правильна "статус виходу 0, навіть якщо сталася помилка" ... Я думаю, що -qваріант не здається підходящим ... тому що ви хочете, щоб він знав про помилку, перевіривши стан виходу.
Тревор Бойд Сміт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.