Poner la salida de un comando con la interacción dentro de una variable durante el uso de grep en bash

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

  •  23-08-2019
  •  | 
  •  

Pregunta

Este programa que utilizo tiene sus propias variables para establecer cuando se ejecuta, por lo que quiero para establecer esas variables y luego greping la salida almacenarlo dentro de una variable. Sin embargo, no sé cómo hacer esto de la manera correcta. La idea que tengo no funciona. La atención se centra en las líneas 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

Pero me sale esto:

./listweather: line 7: unexpected EOF while looking for matching `)'
./listweather: line 16: syntax error: unexpected end of file
¿Fue útil?

Solución

La elaboración de respuestas de todos, me encontré con una solución de trabajo a mí mismo. Este código funciona para mí:

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

Gracias a todos!

Otros consejos

Yo pondría el programa se ejecute en un archivo de script .sh por separado, y luego ejecutar el script desde el primer archivo, pasando los argumentos que desea pasar como argumentos de línea de comandos. De esa manera se puede probar por separado.

También puede hacerlo de una función, pero me gusta la modularidad del segundo guión. No udnerstand exactamente lo que está tratando de hacer el anterior, pero algo como:

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 necesita la interacción, me gustaría probar algo como esto:

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

Desafortunadamente, usted tiene que escribir exit como parte de la interacción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top