Mettre la sortie d'une commande d'interaction à l'intérieur d'une variable en utilisant grep dans bash

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

  •  23-08-2019
  •  | 
  •  

Question

Ce programme je l'utilise a ses propres variables à définir lorsque vous l'exécutez, alors je veux mettre ces variables et greping alors la sortie puis le stocker dans une variable. Cependant, je ne sais pas comment s'y prendre la bonne façon. L'idée que j'ai ne fonctionne pas. L'accent est mis sur les lignes 7 à 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

Mais j'obtiens ceci:

./listweather: line 7: unexpected EOF while looking for matching `)'
./listweather: line 16: syntax error: unexpected end of file
Était-ce utile?

La solution

Mettre ensemble les réponses de tout le monde, je suis tombé sur une solution de travail moi-même. Ce code fonctionne pour moi:

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

Merci à tous!

Autres conseils

Je mettrais votre programme à exécuter dans un fichier script .sh séparé, puis exécutez le script à partir de votre premier fichier, en passant les arguments que vous souhaitez passer comme arguments de ligne de commande. De cette façon, vous pouvez les tester séparément.

Vous pouvez aussi le faire dans une fonction, mais j'aime la modularité du second script. Je n'udnerstand pas exactement ce que vous essayez de faire ci-dessus, mais quelque chose comme:

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

Si sflist a besoin d'interaction, je vais essayer quelque chose comme ceci:

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

Malheureusement, vous devez taper exit dans le cadre de l'interaction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top