Как передать аргумент -v скрипту AWK CGI, вызываемому через URL? - PullRequest
3 голосов
/ 16 ноября 2011

У меня есть сценарий AWK, который выглядит как

#!/usr/bin/gawk -f

BEGIN { print myVar; }
{ print; }

, который я могу запустить локально в оболочке Unix с помощью команды

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

Он правильно печатает «значение» и затем выводитфайл ввода.

Я настроил веб-сервер apache с включенным 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

но как я могу передать бит "-v myVar = value" через URL?

1 Ответ

1 голос
/ 16 ноября 2011

Вы не можете передать переменную '-v' через интерфейс CGI. Единственный способ доступа к информации - через несколько переменных среды, которые вам устанавливает интерфейс CGI. Вы можете получить доступ к ним в awk через массив ENVIRON. Вероятно, вас больше всего интересует переменная 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]
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...