Mam skrypt z funkcją:
function install_log() { echo "$1" >> $INSTALL_LOG_OUTPUT 2>&1 }
Ta funkcja działa tak, jak powinna. Jest to funkcja zapisująca coś w pliku dziennika.
Dodałem kilka innych poleceń do skryptu, aby odczytać podane parametry skryptu:
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"
Ale z nowymi liniami, Otrzymuję niepotrzebne wiadomości:
$INSTALL_LOG_OUTPUT: ambiguous redirect
Dowiedziałem się, że pochodzi z dwóch linii
install_log "-> parameter $argument" # ... install_log "# AUTOMATIC_INSTALL: $AUTOMATIC_INSTALL"
Czy ktoś wie, dlaczego pojawiają się komunikaty.
Komentarze
Odpowiedź
Umieść w funkcji INSTALL_LOG_OUTPUT w cudzysłowie, na przykład:
function install_log() { echo "$1" >> "$INSTALL_LOG_OUTPUT" 2>&1 }
Po ponownym uruchomieniu skryptu prawdopodobnie zostanie wyświetlony komunikat o błędzie wskazujący że INSTALL_LOG_OUTPUT jest pusty, z komunikatem tego rodzaju: bash: : No such file or directory
.
INSTALL_LOG_OUTPUT
pusta jest jednym z powodów.test
instrukcjiif
. Powinien to być[ "$argument" == "-automatic" ]; then
. Może to być związane ze zgłoszonym błędem, ale nie musi.$INSTALL_LOG_OUTPUT
została przypisana trzy wiersze później -.-