Выполнить команду, определенную выводом предыдущего (т. Е. Только если был какой-то вывод) - PullRequest
4 голосов
/ 02 апреля 2011

Должно быть довольно просто ответить:

Допустим, я хотел выполнить команду, определенную выводом предыдущего в Bash:

curl http://website.com 2> /dev/null | grep -i "test" --count | <MY-COMMAND>

Что мне нужно: <MY-COMMAND> должно выполняться, только если у grep было несколько совпадений (хотя бы 1).

Как мне этого добиться?

Также, пожалуйста, не стесняйтесь добавлять подходящие теги, я не могу придумать ни одного

Ответы [ 4 ]

6 голосов
/ 02 апреля 2011

ifne утилита («запустить программу, если стандартный ввод не пуст») из пакета moreutils Джой Хесса вам подойдет.из этого:

команда, которая будет выполнять следующую команду тогда и только тогда, когда стандартный ввод не пуст.Я часто хочу это в crontabs, например:

find . -name core | ifne mail -s "Core files found" root
5 голосов
/ 02 апреля 2011

Вам нужен вывод команды grep для передачи вашей команде? Ответ проще, если нет. В этом случае, поскольку код возврата grep успешен, только если он находит совпадение, вы можете использовать && или if:

curl http://website.com 2> /dev/null | grep -q -i "test" && <MY-COMMAND>

if curl http://website.com 2> /dev/null | grep -q -i "test"; then
    <MY-COMMAND>
fi

Оператор && - это сокращенный способ выполнения проверки if-else. Это оператор короткого замыкания, что означает, что правая сторона будет выполняться только в случае отказа левой стороны.

Если вам нужно передать вывод в вашу команду, вам нужно сохранить вывод во временный файл, проверить на совпадение, а затем выполнить команду:

if curl http://website.com 2> /dev/null | grep -i "test" > /tmp/grep.txt; then
    <MY-COMMAND> < /tmp/grep.txt
fi
2 голосов
/ 02 апреля 2011
curl http://website.com 2> /dev/null | grep -i "test" && <MY-COMMAND>

со страницы руководства grep: «статус выхода равен 0, если найдены выбранные строки, и 1, в противном случае»

Команда после && выполняется только в том случае, если предыдущая команда вернула статус выхода 0.

0 голосов
/ 02 апреля 2011
curl http://www.google.com 2>/dev/null | grep window -i -c && echo "this is a success"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...