Ich habe Ein Skript mit einer Funktion:
function install_log() { echo "$1" >> $INSTALL_LOG_OUTPUT 2>&1 }
Diese Funktion funktioniert ordnungsgemäß. Es ist eine Funktion, etwas in eine Protokolldatei zu schreiben.
Ich habe dem Skript einige andere Befehle hinzugefügt, um die angegebenen Parameter des Skripts zu lesen:
AUTOMATIC_INSTALL= for argument in "$@" do install_log "-> parameter $argument" if [ "$argument" == "--automatic" ] || ["$argument" == "-automatic" ]; then AUTOMATIC_INSTALL=True fi done install_log "# AUTOMATIC_INSTALL: $AUTOMATIC_INSTALL"
Aber mit den neuen Zeilen, Ich erhalte einige nicht benötigte Nachrichten:
$INSTALL_LOG_OUTPUT: ambiguous redirect
Ich habe herausgefunden, dass dies aus den beiden Zeilen
install_log "-> parameter $argument" # ... install_log "# AUTOMATIC_INSTALL: $AUTOMATIC_INSTALL"
Weiß jemand, warum die Nachrichten auftreten.
Kommentare
-
INSTALL_LOG_OUTPUT
leer zu sein ist ein Grund. - Es gibt Ein Syntaxfehler in der zweiten
test
derif
-Anweisung. Es sollte[ "$argument" == "-automatic" ]; then
sein. Es kann mit dem gemeldeten Fehler zusammenhängen oder nicht. - @muru: Sie hatten Recht. Die Zuweisung des Dateinamens für
$INSTALL_LOG_OUTPUT
erfolgte drei Zeilen später -.-
Antwort
Fügen Sie in Ihrer Funktion Anführungszeichen um INSTALL_LOG_OUTPUT ein:
function install_log() { echo "$1" >> "$INSTALL_LOG_OUTPUT" 2>&1 }
Nach dem erneuten Ausführen Ihres Skripts wird wahrscheinlich eine Fehlermeldung angezeigt dass INSTALL_LOG_OUTPUT leer ist, mit einer Nachricht dieser Art: bash: : No such file or directory
.