Помещение выходных данных команды с взаимодействием внутри переменной при использовании grep в bash
Вопрос
Эта программа, которую я использую, имеет свои собственные переменные, которые нужно устанавливать при ее запуске, поэтому я хочу установить эти переменные, а затем преобразовать выходные данные grep, а затем сохранить их внутри переменной.Однако я не знаю, как поступить с этим правильно.Идея, которая у меня есть, не работает.Основное внимание уделяется строкам с 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
Решение
Собрав воедино ответы всех присутствующих, я сам наткнулся на рабочее решение.Этот код работает для меня:
#!/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
Спасибо всем!
Другие советы
Я бы поместил вашу программу для запуска в отдельный файл сценария .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
Если sflist нуждается во взаимодействии, я бы попробовал что-то вроде этого:
SFFILE=$(
( echo SFFILE = "$SFFILE"
echo AREA = "@$STATION"
echo DATTIM = all
echo SFPARM = TMPF;DWPF
echo run
cat
) | sflist)
К сожалению, вам придется ввести exit
как часть взаимодействия.