OpenStreetMap Bash/CGI脚本

OpenStreetMap Bash/CGI脚本,bash,cgi,openstreetmap,Bash,Cgi,Openstreetmap,我正在尝试构建一个Bash CGI脚本,该脚本将坐标作为url的参数,并使用渗透来提取地图、拆分器和mkgmap来生成地图,以便可以使用Qlandkarte打开地图。我的问题是,当我键入wget localhost/cgi bin/script.pl?top=42&left=10&bottom=39&right=9&file=map.osm时,linux终端会读取带有坐标的文件。如何使wget激活脚本,使其获取坐标并执行命令。另外,当在最后创建映射时,如何返回由脚本创建的文件。 谢谢 您不需要在

我正在尝试构建一个Bash CGI脚本,该脚本将坐标作为url的参数,并使用渗透来提取地图、拆分器和mkgmap来生成地图,以便可以使用Qlandkarte打开地图。我的问题是,当我键入wget localhost/cgi bin/script.pl?top=42&left=10&bottom=39&right=9&file=map.osm时,linux终端会读取带有坐标的文件。如何使wget激活脚本,使其获取坐标并执行命令。另外,当在最后创建映射时,如何返回由脚本创建的文件。 谢谢


您不需要在由
sudo
运行的三个命令上使用
$(…)
。只要
sudo…
etc.就足够了。我认为shell正在扩展URL中的“&”字符,作为“对该&char前面的命令文本进行后台处理”的指示。所以试着引用你的整个URL,比如
wget'localhost/cgi-bin/script.pl?top=42&left=10&bottom=39&right=9&file=map.osm'
。祝你好运。另外,你有一个perl脚本,或者你正在给你的
bash
脚本命名为“script.pl”?我会试试。不,我只是在论坛上给剧本起了这样的名字。我没有Perl版本,不太熟悉CGI脚本。感谢您提供的信息,希望它能成功。如果您在本地执行CGI脚本,为什么要编写CGI脚本?一个普通的shell脚本似乎就足够了。
#!/bin/bash

TOP=`echo "$QUERY_STRING" | grep -oE "(^|[?&])top=[0.0-9.0]+" | cut -f 2 -d "=" | head -n1`
LEFT=`echo "$QUERY_STRING" | grep -oE "(^|[?&])left=[0.0-9.0]+" | cut -f 2 -d "=" | head -n1`
BOTTOM=`echo "$QUERY_STRING" | grep -oE "(^|[?&])bottom=[0.0-9.0]+" | cut -f 2 -d "=" | head -n1`
RIGHT=`echo "$QUERY_STRING" | grep -oE "(^|[?&])right=[0.0-9.0]+" | cut -f 2 -d "=" | head -n1`
FILE=`echo "$QUERY_STRING" | grep -oE "(^|[?&])file=[^&]+" | sed "s/%20/ /g" | cut -f 2 -d "="`

$(sudo osmosis --read-xml file=bulgaria.osm --bounding-box top=$TOP left=$LEFT bottom=$BOTTOM right=$RIGHT --write-xml file=$FILE)
$(sudo java -Xmx900m -jar splitter.jar --max-nodes=110000 $FILE)
$(sudo java -ea -Xmx900m -jar mkgmap.jar --tdbfile --route -c template.args)

echo "Content-type: text/html"
echo ""