Каков наилучший способ подавления вывода (stdout и stderr), если программа не завершает работу с ненулевым кодом? Я думаю:
quiet_success()
{
file=$(mktemp)
if ! "$@" > "$file" 2>&1; then
cat "$file"
fi
rm -f "$file"
}
И беги, quiet_success my_long_noisy_script.sh
но я не уверен, что есть лучший способ. Я чувствую, что это должно быть чем-то, что нужно делать другим людям.
Для контекста, я хочу добавить это в мои скрипты cron, чтобы получать по электронной почте все, если они терпят неудачу, но не если они этого не делают.
Да, я просто напечатал это в вопросе. Применил ваше предложение, и я согласен, команда должна нести ответственность за это, но увы ...
—
dimo414
Просто примечание синтаксиса: нет необходимости в скобках вокруг команды.
—
manatwork
sh
синтаксисом, а ваш порядок перенаправления обратный (делайте> "$file" 2>&1
и используйте больше кавычек).