Mettre la sortie d'une commande d'interaction à l'intérieur d'une variable en utilisant grep dans bash
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
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.