Nascondere l'output di un comando shell di solito comporta il reindirizzamento di stderr e stdout. C'è qualche funzione o comando integrato che nasconde di default l'output ma in caso di errore scarica tutto l'output accumulato? Vorrei eseguire questo come wrapper per i ssh
comandi remoti . Ora li ho usando il reindirizzamento, ma non ho idea di cosa li abbia fatti fallire, e sono troppo prolissi.
EDIT: Alla fine ho creato il seguente modello basato sulla risposta di @Belmin che ho modificato un po 'per accumulare tutti i comandi precedenti dallo script, utilizzare l'identificatore del processo corrente, rimuovere automaticamente il registro e aggiungere un errore rosso di errore messaggio quando qualcosa va storto. In questo modello i silent
wrapper iniziali avranno esito positivo, quindi falliranno il terzo comando perché la directory esiste già:
#!/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
qualcosa del genere:$* >>"${SILENT_LOG}" 2>&1" || report_and_exit