Unix конвейерная команда для перенаправления вывода из stdin в stderr - PullRequest
1 голос
/ 09 марта 2020

У меня есть сценарий оболочки, который выводит информацию об успехах на стандартный вывод, а также выполняет grep для поиска ошибок в журналах

inner. sh:

# do some things
echo success
# do other things
echo success

grep 'error' logs/*

У меня есть другой Сценарий оболочки, который вызывает его, подсчитывает успехи и сравнивает их с ожидаемым числом успехов:

external. sh:

bash ./inner.sh | grep success | wc -l # I compare this number to the expected number

Что я не могу понять, как для этого нужно иметь вывод grep go в stderr, поэтому он не учитывается wc -l в outer.sh, а скорее делает его вокруг wc до терминала, чтобы оператор мог его видеть.

Итак, я хочу команду, подобную stdin_to_stderr, которую я могу передать grep, которая выдаст любые найденные результаты, оставив inner.sh на своем stderr.

Уже есть такая вещь ? Или мне просто нужно написать крошечный скрипт, который бы это делал? Или я думаю об этом неправильно?

1 Ответ

0 голосов
/ 09 марта 2020
bash ./inner.sh >&2 output_log_file

grep -c success output_log_file  -- Count of success 
grep -v -c success output_log_file -- Count of not "success" 

Пример:

echo -e "success.\nerror.\nsuccess.\nError.\nsuccess.\nerror" |  grep -c success

echo -e "success.\nerror.\nsuccess.\nError.\nsuccess." |  grep -v -c success

вывод:

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