我想使用bash文件作为项目的配置文件,因此无论语言如何(尤其是bash和perl),所有脚本都可以使用相同的配置文件。
命令行
没问题$ source configfile.sh
$ ./perlscript.pl
但是在cgi脚本中答案并不那么明确。
一种方法是使用bash cgi文件来执行perl脚本。
#!/usr/bin/env bash
# mycgiscript.cgi
source /path/to/configfile.sh
perl /path/to/perlscript.pl
# i think the print functions in perlscript just output to the browser?
但是如果我这样做,那么bash正在处理所有的http参数解析,除非我弄错了,否则任何perl的cgi功能和模块都会变得无用。因为perl无论如何都会做所有的腿部工作,似乎使用cgi进行参数传递应该很自然,但是bash管理http请求可能没有真正的问题吗?
另一种方法是使用Perl CGI文件来解析配置文件,并根据解析设置环境变量。 configfile.sh
中的变量相互引用,导致复杂的解析和头痛。
那么,在cgi脚本中使用bash
配置文件设置输出生成Perl代码所使用的项目特定的配置/环境变量的最佳做法是什么?
答案 0 :(得分:1)
这大部分都有点hacky,但我喜欢保持配置集中的想法让我们看看它是怎么回事。
如果您正在编写CGI脚本,则需要Web服务器。让我们假设这个答案是apache。
有几种选择:
因此,您可以将配置脚本添加到apache的启动脚本中。这将在启动apache之前设置环境变量,这些变量应该由包括CGI脚本在内的子进程继承。
如果你没有在配置文件中对shell做任何特殊处理,那么在Perl中解析它应该是非常简单的。 Shell::Parser是一个预先存在的模块,对于处理此问题似乎非常彻底。
如果你在配置文件中做了一些有趣的shell技巧,那么让shell运行它然后看看环境中剩下的内容可能会更容易。您的CGI可以运行如下脚本:
source config.sh # read config
env # print out environment
然后解析Perl中env
的输出。
如果您对更大的重写感兴趣,那么App::Config将是我的建议。它不会让你将你的配置保存在shell文件中,但是你可以编写一个Perl脚本,它将从App::Config
配置生成你的shell配置。