2009-05-21 39 views
0

我使用的這個程序有自己的變量來設置它在運行時的設置,所以我想設置這些變量,然後將輸出寫入並存儲一個變量。但是,我不知道如何去做這個正確的方法。我有這個想法是行不通的。重點是線7至14在bash中使用grep時將交互命令的輸出放在一個變量中

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

您能否介紹一下問題到底是什麼問題以及它在腳本中的位置? – Drakosha 2009-05-21 09:03:42

+0

當然。問題在於第7行到第14行。我試圖通過STATION變量grep輸出此命令,然後將輸出從grep發送到另一個變量,然後將其打印出來。問題是這個sflist程序也需要交互。 – M4dRefluX 2009-05-21 09:11:41

回答

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 

謝謝大家!

0

我把你的程序在一個單獨的.SH的腳本文件運行,然後運行該腳本你的第一個文件,傳遞你想傳遞的參數作爲命令行參數。這樣你可以單獨測試它們。

你也可以在一個函數中做到這一點,但我喜歡第二個腳本的模塊性。我不udnerstand正是你正在嘗試上述的事,但這樣的:

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 
0

如果sflist需要互動,我想嘗試這樣的事:

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

不幸的是,你必須鍵入exit作爲交互的一部分。

相關問題