我使用的这个程序在运行时有自己设置的变量,所以我想设置这些变量然后greping输出然后将其存储在变量中。但是,我不知道如何以正确的方式解决这个问题。我的想法不起作用。重点是第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
答案 0 :(得分:1)
汇总每个人的答案,我自己找到了一个有效的解决方案。这段代码适合我:
#!/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
谢谢大家!
答案 1 :(得分:0)
我会让你的程序在一个单独的.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
答案 2 :(得分:0)
如果sflist需要互动,我会尝试这样的事情:
SFFILE=$(
( echo SFFILE = "$SFFILE"
echo AREA = "@$STATION"
echo DATTIM = all
echo SFPARM = TMPF;DWPF
echo run
cat
) | sflist)
不幸的是,您必须在互动中输入exit
。