Bash perl cgi 脚本的配置文件

Bash config file for perl cgi script

我想使用 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 代码所使用的项目特定 config/environment 变量的最佳做法是什么?

其中大部分内容有点老套,但我喜欢保持配置集中的想法,所以让我们看看它是如何进行的。

如果您正在编写 CGI 脚本,则需要 Web 服务器。让我们假设这个答案是 apache。

有几种选择:

重新配置 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 配置。