Ocultar a saída de um comando shell geralmente envolve redirecionar stderr e stdout. Existe algum recurso ou comando interno que, por padrão, oculta a saída, mas que, por erro, despeja toda a saída acumulada? Gostaria de executar isso como um invólucro para ssh
comandos remotos . Agora eu os tenho usando o redirecionamento, mas não tenho idéia do que os fez falhar, e eles são muito detalhados.
EDIT: No final, criei o seguinte modelo com base na resposta de @Belmin, que aprimorei um pouco para acumular todos os comandos anteriores do script, use o identificador de processo atual, remova automaticamente o log e adicione um erro vermelho de falha mensagem quando algo der errado. Neste modelo, os silent
wrappers iniciais serão bem-sucedidos e falharão no terceiro comando porque o diretório já existe:
#!/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
, algo como:$* >>"${SILENT_LOG}" 2>&1" || report_and_exit