2009-05-21 6 views
0

Dieses Programm habe ich eigene Variablen zu setzen, wenn Sie es ausführen, also möchte ich diese Variablen festlegen und dann greping die Ausgabe dann Speichern in eine Variable. Ich weiß jedoch nicht, wie ich das richtig machen soll. Die Idee, die ich habe, funktioniert nicht. Der Fokus liegt auf den Zeilen 7 bis 14.Putting die Ausgabe eines Befehls mit Interaktion innerhalb einer Variablen bei der Verwendung von grep in Bash

1 #!/usr/local/bin/bash 
2 source /home/gempak/NAWIPS/Gemenviron.profile 
3 FILENAME="$(date -u '+%Y%m%d')_sao.gem" 
4 SFFILE="$GEMDATA/surface/$FILENAME" 
5 echo -n "Enter the station ID: " 
6 read -e STATION 
7 OUTPUT=$(sflist << EOF 
8 SFFILE = $SFFILE 
9 AREA = @$STATION 
10 DATTIM = all 
11 SFPARM = TMPF;DWPF 
12 run 
13 exit 
14 EOF) 
15 echo $OUTPUT 

Aber ich bekomme diese:

./listweather: line 7: unexpected EOF while looking for matching `)' 
./listweather: line 16: syntax error: unexpected end of file 
+0

Können Sie bitte mehr erklären, was genau das Problem ist und wo ist es im Skript? – Drakosha

+0

Sicher. Das Problem liegt in den Zeilen 7 bis 14. Ich versuche, die Ausgabe dieses Befehls durch die Variable STATION zu grepsen und dann die Ausgabe von grep in eine andere Variable zu senden und sie dann zu drucken. Die Sache ist, dass dieses sflist Programm Interaktion auch erfordert. – M4dRefluX

+0

Eigentlich nein. Auf welchen Linien würde ich diese anbringen? – M4dRefluX

Antwort

1

Zusammen mit allen Antworten stieß ich selbst auf eine funktionierende Lösung. Dieser Code funktioniert bei mir:

#!/usr/local/bin/bash 
source /home/gempak/NAWIPS/Gemenviron.profile 
FILENAME="$(date -u '+%Y%m%d')_sao.gem" 
SFFILE="$GEMDATA/surface/$FILENAME" 
echo -n "Enter the station ID: " 
read -e STATION 

OUTPUT=$(sflist << EOF 
SFFILE = $SFFILE 
AREA = @$STATION 
DATTIM = ALL 
SFPARM = TMPF;DWPF 
run 
exit 
EOF 
) 
echo $OUTPUT | grep $STATION 

Danke an alle!

0

ich Ihr Programm setzen würde in einem separaten .sh-Skript-Datei auszuführen, und dann das Skript ausführen aus Ihre erste Datei, übergeben Sie die Argumente, die Sie als Befehlszeilenargumente übergeben möchten. Auf diese Weise können Sie sie separat testen.

Sie könnten es auch in einer Funktion tun, aber ich mag die Modularität des zweiten Skripts. Ich weiß nicht udnerstand genau das, was Sie versuchen, oben zu tun, aber so etwas wie:

runsflist.sh: 
#!/bin/bash 

FILENAME="$(date -u '+%Y%m%d')_sao.gem" 
SFFILE="$GEMDATA/surface/$FILENAME" 
AREA = @$STATION 
DATTIM = all 
SFPARM = TMPF;DWPF 
grep $STATION | sflist 

main.sh: 
#!/bin/bash 

echo -n "Enter the station ID: " 
read -e STATION 
OUTPUT=`runsflist.sh` 
echo $OUTPUT 
+0

Die Variablen AREA, DATTIM und SFPARM sind VOLLSTÄNDIG von bash getrennt, es sind die eigenen Variablen des Programms, die ich einstellen muss, wenn es läuft. – M4dRefluX

0

Wenn sflist Interaktion braucht, würde ich so etwas wie dies versuchen:

SFFILE=$(
    (echo SFFILE = "$SFFILE" 
    echo AREA = "@$STATION" 
    echo DATTIM = all 
    echo SFPARM = TMPF;DWPF 
    echo run 
    cat 
) | sflist) 

Leider müssen Sie Geben Sie exit als Teil der Interaktion ein.

Verwandte Themen