Який найкращий спосіб придушити вихід (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
Просто синтаксична примітка: немає потреби в дужках навколо команди.
—
манатура
sh
синтаксисом, а ваш порядок переадресації є зворотним (зробіть> "$file" 2>&1
і використовуйте більше лапок).