Mettendo l'output di un comando con l'interazione all'interno di una variabile durante l'utilizzo grep in bash

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

  •  23-08-2019
  •  | 
  •  

Domanda

Questo programma che uso ha le sue variabili da impostare quando lo si esegue, quindi voglio impostare tali variabili e quindi l'uscita greping poi riporlo all'interno di una variabile. Tuttavia, non so come fare per questo il modo corretto. L'idea che ho non funziona. L'attenzione si concentra sulle linee da 7 a 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

Ma ottengo questo:

./listweather: line 7: unexpected EOF while looking for matching `)'
./listweather: line 16: syntax error: unexpected end of file
È stato utile?

Soluzione

Mettere insieme le risposte di tutti, mi sono imbattuto in una soluzione di lavoro me stesso. Questo codice funziona per me:

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

Grazie a tutti!

Altri suggerimenti

Avevo messo il vostro programma per l'esecuzione in un file di script .sh separati, e quindi eseguire lo script dal primo file, passando gli argomenti che si desidera passare come argomenti della riga di comando. In questo modo è possibile testare separatamente.

Si potrebbe anche farlo in una funzione, ma mi piace la modularità del secondo script. Non udnerstand esattamente quello che stai cercando di fare in precedenza, ma qualcosa di simile:

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

Se sflist ha bisogno di interazione, mi piacerebbe provare qualcosa di simile:

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

Purtroppo, si deve digitare exit come parte dell'interazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top