2

Я использую bash-скрипт для проверки вывода cron-jobs:

some-cron-script.sh | check_pipe.sh

check_pipe.sh читает канал и, если находит внутри определенные ключевые слова (например, «ошибка» или «не удалось»), отправляет электронное письмо. Теперь я хотел бы также проверить состояние выхода первого скрипта в файле check_pipe.sh. К сожалению, $ {PIPESTATUS [@]} еще не установлен при выполнении check_pipe.sh. Если я спрашиваю PIPESTATUS после канала в новой команде, даются два значения - но для меня слишком поздно. Любая помощь?

Спасибо!

1 ответ1

1

Сохраните выходные данные в переменной (если она не слишком велика, см. Значение переменной оболочки):

output=$(some-script)
status=$? check-pipe <<<"$output"   # warning: <<< is not POSIX
unset output

В качестве альтернативы используйте (временный) файл:

some-script >file
status=$? check-pipe <file
rm file

В обоих случаях check-pipe получает выходные данные some-script через stdin плюс статус exit в качестве переменной status среды. Две команды не работают параллельно.

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