2011-11-16 29 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

相關問題