Colocar a saída de um comando com interacção dentro de uma variável durante a utilização grep em bash

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

  •  23-08-2019
  •  | 
  •  

Pergunta

Este programa que eu uso tem suas próprias variáveis ??para definir quando você executá-lo, então eu quero para definir essas variáveis ??e, em seguida, greping a saída, em seguida, armazená-lo dentro de uma variável. No entanto, eu não sei como ir sobre isso da maneira correta. A ideia que eu tenho não funciona. O foco é sobre linhas 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

Mas fico com esta:

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

Solução

Colocar respostas junto de todos, me deparei com uma solução de trabalho sozinho. Esse código funciona para mim:

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

Obrigado a todos!

Outras dicas

Eu ia colocar o seu programa para ser executado em um arquivo de script .sh separado, e depois executar o script a partir de seu primeiro arquivo, passando os argumentos que você deseja passar como argumentos de linha de comando. Dessa forma, você pode testá-los separadamente.

Você também pode fazê-lo em uma função, mas eu como a modularidade do segundo script. Eu não udnerstand exatamente o que você está tentando fazer acima, mas 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

Se sflist requer interacção, eu tentaria algo como isto:

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

Infelizmente, você tem que digitar exit como parte da interação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top