2011-11-16 71 views
3

我有一个awk脚本,它看起来像如何将-v参数传递给通过URL调用的AWK CGI脚本?

#!/usr/bin/gawk -f 

BEGIN { print myVar; } 
{ print; } 

,我可以在本地在Unix shell通过命令

./myScript.awk -v myVar=value /tmp/inputfile 

它正确打印“值”,然后转储inputfile中运行。

我成立了一个Apache Web服务器启用CGI和创建以下myScript.cgi:

#!/usr/bin/gawk -f 

BEGIN { 
    print "Content-type: text/plain"; 
    print ""; 
    print myVar; 
} 
{ print; } 

我可以指着我的网页浏览器上运行它

http://localhost/cgi-bin/myScript.cgi?/tmp/inputfile 

,但我怎么能通过URL传递“-v myVar = value”位?

+0

您是否尝试在URL上使用?myVar =值? –

+0

我仍然希望“/ tmp/inputfile”在参数中出现。我试着在“+”,“&”和“%20”之间添加“myVar = value”作为分隔符,但不带“-v”,但运气不多。 – Balint

回答

1

不能通过CGI接口传递'-v'变量。访问信息的唯一方法是通过CGI接口为您设置的许多环境变量。您可以通过ENVIRON阵列在awk中访问它们。你可能在QUERY_STRING变量最感兴趣,所以试试这个:

#!/usr/bin/gawk -f 
BEGIN { 
    print "Content-type: text/plain" 
    print "" 
    print ENVIRON["QUERY_STRING"] 
} 
1 

当作为http://localhost/cgi-bin/myScript.cgi?myVar=foo&otherVar=bar访问,ENVIRON["QUERY_STRING"]将包含myVar=foo&otherVar=bar。你将不得不自己处理这个字符串来提取你的变量。例如(未经测试):

BEGIN { 
    split(ENVIRON["QUERY_STRING"], a, "&") 
    for (i in a) { 
     if (a[i] ~ /^myVar=/) { 
      split(a[i], tmp, "=") 
      myVar=tmp[2] 
     } 
    } 
} 
+0

这也将“myVar = foo&otherVar = bar”传递给“/ usr/bin/gawk -f”,这是错误的。我的脚本确实有myVar和otherVar参数,但不会有stdin源(因为传递给-f的参数将导致找不到文件)。 – Balint

+0

@Balint我想你的Apache CGI配置对我来说还不清楚,'-f'的参数应该只是cgi脚本本身。 – schot