Помещение вывода команды с взаимодействием внутри переменной при использовании grep в bash - PullRequest
0 голосов
/ 21 мая 2009

Эта программа, которую я использую, имеет свои собственные переменные, которые нужно установить при запуске, поэтому я хочу установить эти переменные, а затем получить вывод и сохранить его внутри переменной. Тем не менее, я не знаю, как поступить правильно. Идея, которая у меня есть, не работает. Основное внимание уделяется строкам с 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

Но я получаю это:

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

Ответы [ 3 ]

1 голос
/ 21 мая 2009

Собирая ответы каждого, я сам нашел рабочее решение. Этот код работает для меня:

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

Спасибо всем!

0 голосов
/ 21 мая 2009

Если sflist нуждается во взаимодействии, я бы попробовал что-то вроде этого:

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

К сожалению, вы должны ввести exit как часть взаимодействия.

0 голосов
/ 21 мая 2009

Я бы поставил вашу программу для запуска в отдельный файл сценария .sh, а затем запустил сценарий из вашего первого файла, передав аргументы, которые вы хотите передать в качестве аргументов командной строки. Таким образом, вы можете проверить их отдельно.

Вы также можете сделать это в функции, но мне нравится модульность второго скрипта. Я не знаю точно, что вы пытаетесь сделать выше, но что-то вроде:

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
...