Masquer la sortie d'une commande shell implique généralement de rediriger stderr et stdout. Existe-t-il une fonction ou une commande intégrée qui, par défaut, masque la sortie, mais en cas d'erreur, vide toute la sortie accumulée? Je voudrais l'exécuter comme un wrapper pour les ssh
commandes à distance . Maintenant, je les utilise en redirection, mais je ne sais pas ce qui les a fait échouer, et ils sont tout simplement trop verbeux.
EDIT: Au final, j'ai créé le modèle suivant basé sur la réponse de @Belmin que j'ai légèrement modifié pour accumuler toutes les commandes précédentes du script, utiliser l'identifiant de processus actuel, supprimer automatiquement le journal et ajouter une erreur rouge d'erreur message en cas de problème. Dans ce modèle, les silent
wrappers initiaux réussiront, puis échouera la troisième commande car le répertoire existe déjà:
#!/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
quelque chose comme:$* >>"${SILENT_LOG}" 2>&1" || report_and_exit