Каков наилучший способ подавления вывода (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, чтобы получать по электронной почте все, если они терпят неудачу, но не если они этого не делают.
shell-script
cron
io-redirection
dimo414
источник
источник
sh
синтаксисом, а ваш порядок перенаправления обратный (делайте> "$file" 2>&1
и используйте больше кавычек).Ответы:
Вам придется где-то буферизовать вывод, несмотря ни на что, так как вам нужно дождаться, пока код завершения не будет знать, что делать. Примерно так, наверное, проще всего:
источник
set -o xtrace
в своем сценарии оболочки, то все выходные данные будут там снова, как часть регистрации деталей назначенияoutput=...
:-). В этом случае, вероятно, лучше использоватьchronic
.moreutils
Пакет содержит программуchronic
для этой цели. Вы просто называете это какОчень удобно в работе cron.
источник
chronic
потомуcronic
что это похожая программа, которая подавляет вывод, если команда не существует с ненулевым кодом или не выводит стандартную ошибку .