Mam zadanie crona uruchamiające polecenie php w następujący sposób:
php /path/to/script.php > dev/null
Powinno to wysłać tylko dane wyjściowe STDERR na adres MAILTO. Z tego, co zbieram, skrypt php nie wyświetla żadnych informacji STDERR, nawet jeśli jego status wyjścia wynosi 1.
Jak mogę uzyskać wynik polecenia php (STDOUT) i wysłać go do MAILTO tylko wtedy, gdy status wyjścia jest niezerowy?
Czy zastanawiałeś się nad przewlekłą z moreutils . Myślę, że robi dokładnie to, co chcesz:
W ostatnich wersjach istnieje
-e
przełącznik, który pokazuje również pełny wynik, jeśli coś zostało zapisane do stderr.źródło
Ponieważ dane wyjściowe są generowane przed poznaniem statusu wyjścia, musisz je gdzieś zapisać.
Jedną z możliwości jest zapisanie go w zmiennej powłoki:
Nie zachowuje to całkowicie wyniku skryptu (usuwa końcowe puste linie), ale w tym przypadku jest to w porządku. Jeśli chcesz zachować końcowe puste linie:
Jeśli istnieje potencjalnie dużo danych wyjściowych, możesz zamiast tego zapisać je w pliku tymczasowym:
źródło