Скрытие вывода команды оболочки обычно включает в себя перенаправление stderr и stdout. Существуют ли какие-либо встроенные средства или команды, которые по умолчанию скрывают вывод, но при ошибке сбрасывают весь накопленный вывод? Я хотел бы запустить это в качестве оболочки для удаленных ssh
команд. Теперь я использую перенаправление, но не понимаю, что заставило их потерпеть неудачу, и они слишком многословны.
РЕДАКТИРОВАТЬ: В конце я создал следующий шаблон на основе ответа @Belmin, который я немного подправил, чтобы собрать все предыдущие команды из скрипта, использовать идентификатор текущего процесса, автоматически удалить журнал и добавить ошибку красного цвета. сообщение, когда что-то идет не так. В этом шаблоне начальные silent
обертки будут успешными, а затем не пройдут третью команду, потому что каталог уже существует:
#!/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
что-то вроде:$* >>"${SILENT_LOG}" 2>&1" || report_and_exit