Ukrywanie danych wyjściowych polecenia powłoki zwykle wymaga przekierowania stderr i stdout. Czy jest jakieś wbudowane narzędzie lub polecenie, które domyślnie ukrywa dane wyjściowe, ale w przypadku błędu zrzuca całe zgromadzone dane wyjściowe? Chciałbym uruchomić to jako opakowanie zdalnych ssh
poleceń. Teraz używam ich przekierowania, ale nie mam pojęcia, co spowodowało, że zawiodły, a oni są po prostu zbyt gadatliwi.
EDYCJA: W końcu stworzyłem następujący szablon na podstawie odpowiedzi @Belmin, którą trochę poprawiłem, aby zgromadzić wszystkie poprzednie polecenia ze skryptu, użyć bieżącego identyfikatora procesu, automatycznie usunąć dziennik i dodać błąd czerwony błąd wiadomość, gdy coś pójdzie nie tak. W tym szablonie początkowe silent
opakowania zakończą się powodzeniem, a następnie zakończą się niepowodzeniem trzeciego polecenia, ponieważ katalog już istnieje:
#!/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
czegoś takiego:$* >>"${SILENT_LOG}" 2>&1" || report_and_exit