2017-06-22 1 views
-1

I wie unten ein, bis Schleife in bash schreibe:Until-Schleife Problem in bash

#!/bin/bash 


#check of the out file size and wait file size is reached to feed file then come out 


FEED_FILE_SIZE=$(stat -c%s "$FEED_FILE") 
echo "FEED_FILE_SIZE : "$FEED_FILE_SIZE 


until[[ $(stat -c%s "$OUT_FILE") -gt $FEED_FILE_SIZE]] 
    do 
     echo "sleeping for next 5 seconds " 
     sleep 5 
    done  

aber ich bin unten Fehler immer und ich bin nicht in der Lage zu verstehen, warum?

./dtcc.sh: line 140: until[[ 0 -gt 185219880]]: command not found 
./dtcc.sh: line 141: syntax error near unexpected token `do' 
./dtcc.sh: line 141: ` do' 

bitte helfen Sie mir. Danke im Voraus.

+0

Die Variablen 'FEED_FILE' und' OUT_FILE' sind nicht initialisiert. Bitte fügen Sie 'set -x' als zweite Zeile ein, um den Debug-Modus zu aktivieren. Dann wirst du sehen, was ich gesehen habe: Die nicht initialisierten Variablen werden zu nichts erweitert. Somit wird das 'bis 'syntaktisch falsch. (Nachdem ich die Variablen initialisiert hatte, erkannte ich, was bereits angestellt wurde.) – Scheff

+1

@Scheff Das ist nicht das Problem; Die Syntax ist in Ordnung, stattdessen wird jedes leere String-Argument für "-gt" einfach als 0 behandelt. – chepner

+0

@chepner Das ist interessant zu wissen. Ich erinnere mich, dass ich oft Dinge wie 'if [[" x $ VAR "==" x "]]; dann echo "VAR leer"; fi'. Aber Sie haben Recht - haben Sie es einfach überprüft: 'if [[$ VAR ==" "]]; dann echo "VAR leer"; fi' funktioniert auch. Möglicherweise war dies ein Problem in älteren Versionen von bash. (Diese Beobachtung ist tatsächlich eine bedeutende Zeit her.) Vielleicht war es nie ein Problem, sondern nur das bessere Gefühl von jemandem, von dem ich gelernt habe. – Scheff

Antwort

3

Kurze Antwort: Leerzeichen.

ein Leerzeichen zwischen bis und [[, und einer anderen zwischen FEED_FILE_SIZE $ und]]

Sie sollen es läuft ganz gut finden.