2012-08-14 51 views
1

下面是我用來創建PIE圖的shell腳本。運行shell腳本時sh -x vs bash -x

#! /bin/bash 

TEMP=$(mktemp -t chart.html) 
QUERY1=36 
QUERY2=64 
cat > $TEMP <<EOF 
<html> 
    <head> 
    <!--Load the AJAX API--> 
    <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
    <script type="text/javascript"> 

     // Load the Visualization API and the piechart package. 
     google.load('visualization', '1.0', {'packages':['corechart']}); 

     // Set a callback to run when the Google Visualization API is loaded. 
     google.setOnLoadCallback(drawChart); 

     // Callback that creates and populates a data table, 
     // instantiates the pie chart, passes in the data and 
     // draws it. 
     function drawChart() { 

     // Create the data table. 
     var data = new google.visualization.DataTable(); 
     data.addColumn('string', 'Title'); 
     data.addColumn('number', 'Value'); 
     data.addRows([ 
      ['Error Percentage', $QUERY1], 
      ['No Error Percentage', $QUERY2] 
     ]); 

     // Set chart options 
     var options = {'title':'Errors', 
         'width':400, 
         'height':300}; 

     // Instantiate and draw our chart, passing in some options. 
     var chart = new google.visualization.PieChart(document.getElementById('chart_div')); 
     chart.draw(data, options); 
     } 
    </script> 
    </head> 

    <body> 
    <!--Div that will hold the pie chart--> 
    <div id="chart_div"></div> 
    </body> 
</html> 
EOF 

# open browser 
case $(uname) in 
    Darwin) 
     open -a /Applications/Google\ Chrome.app $TEMP 
     ;; 

    Linux|SunOS) 
     firefox $TEMP 
     ;; 
esac 

問題陳述: -

我保存上述文件作爲chart.sh。每當我試圖運行上面chart.sh文件sh -x chart.sh

我總是得到錯誤原樣

syntax error at line number 3: `TEMP=$' unexpected 

但是當我嘗試運行上述sh文件原樣

bash -x chart.sh 

那麼我沒有得到任何error。爲什麼這樣?我的shell腳本中是否有任何錯誤,並假設如果我需要運行它像sh -x chart.sh總是那麼我需要在我的shell腳本中進行更改?

我正在運行SunOS

+0

什麼「sh」你跑?什麼版本的SunOS/Solaris? – Random832 2012-08-14 00:07:50

+0

我如何找到SunOS的版本名稱?當我做'uname -a'時。我有這樣的東西 - 'bash-3.00 $ uname -a SunOS lvsaishdc3in0001 5.10 Generic_142901-02 i86pc i386 i86pc ' – AKIWEB 2012-08-14 00:10:21

+0

您的/ bin/sh不是POSIX兼容的。 – jordanm 2012-08-14 00:11:05

回答

3

shbash可以指向完全不同的可執行文件。在某些系統上sh是與bash的符號鏈接的事實不應該讓您認爲在任何地方都是如此。如果您需要bash,請明確使用它。

編輯(mpapis):另請注意,即使您通過sh撥打電話bash,其行爲也不完全相同。

+0

這意味着我不能像'sh -x chart.sh'那樣運行我的上面的shell腳本?但是我寫的任何其他簡單的腳本,我都可以通過'sh -x chart.sh'運行它。 : -/ – AKIWEB 2012-08-14 00:15:32

+0

@ Nevzz03,如果'sh -x'不能用於一個腳本,它不應該與任何其他腳本一起工作,因爲您運行的是同樣的'sh'。 – rid 2012-08-14 00:18:35

+0

它適用於我的其他腳本就好了。但只有這個腳本,我在我的問題中得到了上述錯誤。 – AKIWEB 2012-08-14 02:17:46