Setzt man die Ausgabe eines Befehls mit Interaktion innerhalb einer Variablen während grep in bash Verwendung

StackOverflow https://stackoverflow.com/questions/891988

  •  23-08-2019
  •  | 
  •  

Frage

Dieses Programm verwende ich hat es eigene Variablen ist zu setzen, wenn Sie es ausführen, so möchte ich diese Variablen setzen und dann den Ausgang greping dann es in einer Variablen zu speichern. Allerdings weiß ich nicht, wie etwa das der richtige Weg zu gehen. Die Idee, die ich habe nicht funktioniert. Der Fokus liegt auf den Zeilen 7 bis 14.

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
War es hilfreich?

Lösung

Setzen aller Antworten zusammen, stieß ich auf eine funktionierende Lösung selbst. Dieser Code funktioniert für mich:

#!/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!

Andere Tipps

würde ich Ihr Programm setzt in einer separaten .sh-Skript-Datei auszuführen, und dann das Skript von Ihrer ersten Datei ausführen, die Argumente zu übergeben Sie als Befehlszeilenargumente übergeben werden sollen. Auf diese Weise können sie separat testen können.

Sie können auch tun es in einer Funktion, aber Ich mag die Modularität des zweiten Skript. Ich udnerstand nicht genau, 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

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

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

Leider müssen Sie exit als Teil der Interaktion geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top