0

我使用的这个程序在你运行它时有它自己的变量要设置,所以我想设置这些变量,然后对输出进行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
4

3 回答 3

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

谢谢大家!

于 2009-05-21T10:00:29.553 回答
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
于 2009-05-21T09:20:52.693 回答
0

如果 sflist 需要交互,我会尝试这样的事情:

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

不幸的是,您必须exit在交互过程中输入内容。

于 2009-05-21T09:35:33.287 回答