2012-08-14 68 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