Ẩn đầu ra của lệnh shell thường liên quan đến việc chuyển hướng stderr và stdout. Có bất kỳ tiện ích hoặc lệnh dựng sẵn nào mà theo mặc định ẩn đầu ra nhưng khi lỗi sẽ bỏ tất cả đầu ra tích lũy? Tôi muốn chạy cái này như một trình bao bọc cho các ssh
lệnh từ xa . Bây giờ tôi có chúng bằng cách sử dụng chuyển hướng nhưng tôi không hiểu được điều gì đã khiến chúng thất bại, và chúng quá dài dòng.
EDIT: Cuối cùng, tôi đã tạo mẫu sau dựa trên câu trả lời của @Belmin mà tôi đã điều chỉnh một chút để tích lũy tất cả các lệnh trước đó từ tập lệnh, sử dụng mã định danh quy trình hiện tại, tự động xóa nhật ký và thêm lỗi đỏ. tin nhắn khi có sự cố. Trong mẫu này, các trình silent
bao bọc ban đầu sẽ thành công, sau đó thất bại lệnh thứ ba vì thư mục đã tồn tại:
#!/bin/sh
set -e
SILENT_LOG=/tmp/silent_log_$$.txt
trap "/bin/rm -f $SILENT_LOG" EXIT
function report_and_exit {
cat "${SILENT_LOG}";
echo "\033[91mError running command.\033[39m"
exit 1;
}
function silent {
$* 2>>"${SILENT_LOG}" >> "${SILENT_LOG}" || report_and_exit;
}
silent mkdir -v pepe
silent mkdir -v pepe2
silent mkdir -v pepe
silent mkdir -v pepe2
2>&1
, đại loại như:$* >>"${SILENT_LOG}" 2>&1" || report_and_exit