В сценарии оболочки, который я видел, есть эта строка:
grep -e ERROR ${LOG_DIR_PATH}/${LOG_NAME} > /dev/null
if [ $? -eq 0 ]
В сценарии оболочки, который я видел, есть эта строка:
grep -e ERROR ${LOG_DIR_PATH}/${LOG_NAME} > /dev/null
if [ $? -eq 0 ]
Он проверяет возвращаемое значение ($?
) grep
. В этом случае он сравнивает его с 0 (успех).
Обычно, когда вы видите что-то подобное (проверка возвращаемого значения grep), он проверяет, была ли обнаружена конкретная строка. Хотя перенаправление на /dev/null
не обязательно, то же самое можно сделать с помощью -q
.
/dev/null
— это своего рода специальный файл черной дыры. Когда вы пишете в него, данные выбрасываются. Это классический способ запретить программе вывод вывода на экран.
- person Chris Eberle; 18.08.2011
/dev/null
означает нулевое устройство. Когда я думаю о том, что такое /dev/null
на самом деле, это не кажется таким уж хорошим выбором для имени пользователя.
- person Daniel Haley; 18.08.2011
$?
— это статус выхода последней выполненной команды; по соглашению 0 означает успех, а все остальное указывает на неудачу. Эта строка проверяет успешность выполнения команды grep
.
На справочной странице grep
указано:
Статус выхода равен 0, если выбранные строки найдены, и 1, если не найдены. Если произошла ошибка, статус выхода равен 2. (Примечание: код обработки ошибок POSIX должен проверять наличие «2» или выше.)
Так что в этом случае он проверяет, были ли найдены какие-либо строки ERROR.
Это чрезвычайно часто используемый способ проверки успеха/неудачи команды. Как правило, фрагмент кода, который вы даете, будет реорганизован следующим образом:
if grep -e ERROR ${LOG_DIR_PATH}/${LOG_NAME} > /dev/null; then
...
fi
(Хотя вы можете использовать «grep -q» в некоторых случаях вместо перенаправления на /dev/null, это не переносимо. Многие реализации grep не поддерживают параметр -q, поэтому ваш сценарий может завершиться ошибкой, если вы его используете. )