Ich habe durch einige der ähnlichen Fragen (wie How to set a variable to the output from a command in Bash?), aber die angenommenen Antworten scheinen nicht für mich arbeiten. Ich war mir nicht sicher, ob ich die Frage eines anderen entgleisen oder mein eigenes Duplikat veröffentlichen sollte, also entschuldige mich bitte, wenn ich hier falsch gewählt habe.Wie bekomme ich die Ausgabe eines Bash-Befehls in einer Variablen
Ich möchte den Ausgang und den Exit-Status einer Reihe von Befehlen in einem Skript erhalten, das ich zusammenstelle. Hier ist ein Beispiel dafür, was ich unter Verwendung worden:
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
Das Protokoll und fail-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 obigen Beispiel ich die $ (cmd) Format verwenden, aber ich habe auch versucht, Backticks verwenden.
In meiner Protokolldatei, alles was ich sehe, wenn es ein Fehler ist:
FATAL ERROR: Failed to remove the original, the output was: \n
Auch endet die Ausgabe der ausgefallenen Befehle auf dem Bildschirm nach oben wie üblich. Gibt es einen allgemeinen Grund, dass meine cmd_output-Variablen leer bleiben würden?
Froh, Sie über die Marke von 1000 zu schieben, schreiben Sie weiter! – shellter
Hey Janito, vielen Dank für deine Antwort! Ich kenne die drei Standard-Streams und Redirection-Operatoren, aber der einzige Grund, warum ich sie bisher verwendet habe, ist, entweder alles von einem Befehl an/dev/null oder an eine Protokolldatei zu senden. Ich habe hier nicht einmal die verschiedenen Ströme betrachtet. Die $ file-Variable war ursprünglich in Anführungszeichen, ich habe sie aus Anführungszeichen genommen, als ich die Fehler auffindende Funktionen meines Skripts getestet habe, um einen Fehler zu erzwingen. Nochmals vielen Dank! –