LINUX.ORG.RU

Bash && CGI


0

0

Написан скрипт на баше, принимающий аргументы вида -s 123 -v -t "hello world", т.е. происходит обработка $1 с последующими shift.

Если запускать такой скрипт как CGI для Apache, то все аргументы "склеиваются" в кучу, т.е. "$1" становится равным "$@".

Можно как-то побороть такое поведение не переписывая скрипт? Если это невозможно, то как лучше обрабатывать аргументы? Спасибо.

anonymous

ну так вроде ж для cgi-приложения аргументы должны разделяться амперсандом, надо передавать в качестве параметров строку вида:

-s 123&-v&-t "hello world"

anonymous
()
Ответ на: комментарий от anonymous

Не совсем, давайте разберем конкретный пример:

xio@blacksun $ cd /srv/www/cgi-bin
xio@blacksun $ cat > show-args << EOF
#!/bin/bash

echo
echo arguments:
echo '$@' = "$@"

n=1
while [ ! -z "$1" ]; do
	echo '$'$n = "$1"
	shift 1
	(( n++ ))
done
EOF
xio@blacksun $ chmod o+x show-args
xio@blacksun $ ./show-args thanks for the fish

arguments:
$@ = thanks for the fish
$1 = thanks
$2 = for
$3 = the
$4 = fish
xio@blacksun $ ./show-args "thanks for the fish"

arguments:
$@ = thanks for the fish
$1 = thanks for the fish
xio@blacksun $ w3m -dump "http://localhost/cgi-bin/show-args?thanks&for&the&fish"
arguments:
$@ = thanks\&for\&the\&fish
$1 = thanks\&for\&the\&fish
xio@blacksun $ w3m -dump "http://localhost/cgi-bin/show-args?thanks for the fish"
arguments:
$@ = thanks for the fish
$1 = thanks for the fish

anonymous
()

Heck, я поспешил с вопросом, конечно.  Проблема разрешена -- нужно на месте
ожидаемых пробелов ставить '+':

xio@blacksun $ w3m -dump "http://localhost/cgi-bin/show-args?thanks+for+the+fish"
arguments:
$@ = thanks for the fish
$1 = thanks
$2 = for
$3 = the
$4 = fish

Написано здесь: http://hoohoo.ncsa.uiuc.edu/cgi/primer.html

anonymous
()

Анонимусы - сила

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.