1

ls "$ {VMX_DIR}" | grep -q delta> /dev /null 2> & 1;

Он перечисляет файлы в VMX_DIR и затем передает их в grep, но что он делает?

4 ответа4

4

Он проверяет, есть ли файл или путь, содержащий delta в ${VMX_DIR} затем возвращает результат через код завершения grep, так как grep вернется с нормальным кодом выхода 0, если он найдет совпадение, и кодом ошибки 1 если это не так. Это полезно в условных выражениях bash.

Вот что делает заявка за заявлением:

ls "$ {VMX_DIR}"

Выводит список содержимого каталога, хранящегося по пути ${VMX_DIR}

| grep -q delta

Передайте результаты в grep, выполнив поиск в результатах списка каталогов для delta игнорируя любой вывод в stout.

> /dev /null 2> & 1;

Перенаправляет стандартный вывод в /dev/null чтобы он не печатался. 2>&1 говорит bash перенаправить stderr в stdout (который теперь собирается в /dev/null). Точка с запятой просто завершает строку.

2

Со страницы руководства grep :

   -q, --quiet, --silent
          Quiet;  do  not write anything to standard output.  Exit immedi-
          ately with zero status if any match is found, even if  an  error
          was detected.  Also see the -s or --no-messages option.

По сути, это проверяет, есть ли имя файла, содержащее delta и возвращает true если есть, или false если его нет. Что он на самом деле делает с этим значением истины, так это чье-то предположение из того небольшого фрагмента, который у вас там есть.

0

Последняя часть перенаправляет стандартный вывод и стандартную ошибку в /dev/null - т. Е. Любой вывод команды grep (ошибки, предупреждения или совпадения) отбрасывается. Этот вид команды может быть полезен для простой проверки без вывода данных - $? переменная будет нулевой или ненулевой в зависимости от того, был ли grep или нет.

Вы можете упростить этот код, заменив > /dev/null 2>&1 на &>/dev/null , что в этом случае сделает то же самое: перенаправьте все выходные потоки в /dev/null .

Посмотрите I/O Redirection для деталей.

0

Кажется, что он предназначен просто для определения, есть ли слово «дельта» в списке, и в этом случае он вернет 0, в противном случае он вернет 1. Итак, основываясь на возвращаемом значении, вы знаете, была ли дельта или нет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .