Cách tốt nhất để triệt tiêu đầu ra (stdout và stderr) trừ khi chương trình thoát với mã khác không? Tôi đang nghĩ:
quiet_success()
{
file=$(mktemp)
if ! "$@" > "$file" 2>&1; then
cat "$file"
fi
rm -f "$file"
}
Và chạy quiet_success my_long_noisy_script.sh
nhưng tôi không chắc có cách nào tốt hơn không. Tôi cảm thấy như đây là điều mà người khác cần phải làm.
Đối với ngữ cảnh, tôi đang tìm cách thêm phần này vào tập lệnh cron của mình để tôi được gửi email với mọi thứ nếu chúng thất bại, nhưng không phải nếu chúng không có.
Đúng, tôi vừa gõ nó vào câu hỏi. Áp dụng đề xuất của bạn và tôi đồng ý, lệnh phải chịu trách nhiệm cho việc đó, nhưng than ôi ...
—
dimo414
Chỉ cần một lưu ý cú pháp: không cần dấu ngoặc đơn xung quanh lệnh.
—
manatwork
sh
cú pháp thực sự hợp lệ và thứ tự chuyển hướng của bạn bị ngược (làm> "$file" 2>&1
và sử dụng nhiều trích dẫn hơn).