Как судить о производительности трубопровода? - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть следующая команда, например:

command1 | grep "xxxx" 

command1 выведет некоторый текст строки.

Я надеюсь, что выполнить exit 1, если строка включает xxxx,или выведите строку в консоль, например:

command1 | if [ grep "xxxx" ] then; exit 1; else echo;

Как мне написать оболочку?спасибо!

1 Ответ

0 голосов
/ 27 ноября 2018

Поскольку вы хотите проверить состояние выхода grep и хотите увидеть строку, если она не содержит xxxx, вы можете адаптировать следующий код в соответствии с нашими требованиями (где я использую echo "$line" как суррогат для вашего command1, и я повторяю exit 1 вместо того, чтобы фактически выходить, когда ваш код будет выполняться exit 1):

for line in 'hello xxxx here' 'hello yyyy here'
do
    if ! echo "$line" | grep -v 'xxxx'
    then echo "exit 1"
    fi
done

Вывод:

exit 1
hello yyyy here

См. Как отменить возвращаемое значение процесса? для обсуждения оператора ! в оболочках POSIX (например, Bash).

Поскольку вы не 'Если вы хотите увидеть результат, если он содержит xxxx, но в противном случае опция -v для grep инвертирует логику, выводя только строки, которые не соответствуют xxxx.Статус grep -v 'xxxx' равен 0, когда он находит только строки, которые не соответствуют xxxx, и 1, если он находит строку, которая соответствует.Оператор ! инвертирует это состояние, а if проверяет, является ли инвертированный статус 0, выполняя код then, если инвертированный статус равен 0.

Обратите внимание, что [ это просто командавозвращает подходящее состояние выхода, которое тестирует if.Во многих системах вы можете найти /bin/[ как исполняемый файл, возможно, как (символическую?) Ссылку на /bin/test, но современные оболочки неизменно воспринимают [ и test как встроенные команды.Обратите внимание, что [ проверяет, что его последний аргумент равен ] и возражает, если это не так;test нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...