Wie man die Ausgabe von einem bash-Befehl in einer Variablen

Ich habe folgenden durch einige der ähnliche Fragen (wie So setzen Sie eine variable, um die Ausgabe von einem Befehl in der Bash?), aber die akzeptierten Antworten scheinen nicht für mich arbeiten. Ich war mir nicht sicher, ob ich sollte zu entgleisen jemand anderes die Frage oder mein eigenes doppelte, also entschuldige mich, wenn ich falsch gewählt hier.

Möchte ich die Ausgabe-und exit-status über eine Reihe von Befehlen in einem Skript bin ich der Zusammenstellung. Hier ist ein Beispiel, was ich habe mit:

cmd_output=$(rm $file)
exit_status=$?
if [ "${exit_status}" -eq 0 ]
then
log "Successfully removed the original" ${TAB_LEVEL}
else
fail "Failed to remove the original, the output was: \n ${cmd_output}"
fi

Log und fehl-Funktionen sind:

# Usage: fail "Failure message"
function fail {
echo "FATAL ERROR: $1" >> "${LOG_DIR}/${LOG_FILE}"
exit 1
}

# Usage: log "Log message" 3    Where the tab-level is 3.
function log {
if (("${2}" > 0))
then
eval "printf '    %.0s' {1..$2}" >> "${LOG_DIR}/${LOG_FILE}"
fi
echo "$1" >> "${LOG_DIR}/${LOG_FILE}"
return 0
}

In dem Beispiel oben habe ich die $(cmd) - format, aber ich habe auch versucht, mit backticks.

In meine log-Datei, alles, was ich sehe, wenn es ein Fehler ist:

SCHWERWIEGENDER FEHLER: Fehler beim entfernen der originalen, der Ausgang war: \n

Auch die Ausgabe von fehlgeschlagene Befehle landet auf dem Bildschirm wie gewohnt. Gibt es einen gemeinsamen Grund, dass meine cmd_output Variablen würde leer bleiben?

Schreibe einen Kommentar