linux - 如何创建具有多个变量的环境以在 Linux 中运行程序?

标签 linux bash environment-variables cgi

我正在编写一个将用作 CGI-BIN 的编译程序。

cc -o script.cgi script.c library.a

我可以通过我的网络服务器 (Apache) + 网络浏览器 http://localhost/cgi-bin/script.cgi 或命令行 ./script.cgi< 来测试它.

正常执行时,命令行会显示如下内容:

Content-type: text/html;charset=utf-8

<!DOCTYPE html>
<html>
<head>
     <title>Hello, World!</title>
</head>
<body>
     <h1>Hello, World!</h1>
     <p>Some text that should depend on GET and
     other environmental variables.</p>
</body>
</html>

Web 浏览器将获取相应的 HTML 页面,并相应地显示它。到目前为止一切顺利。

问题是,在调试时,有些错误似乎是由环境变量引起的。我知道我可以通过运行命令行来提供一个特定的变量,例如:

QUERY_STRING='a=b&c=d' ./script.cgi

而且,如果我不小心,我可能会遇到核心段错误。如果此错误发生在我打印 Content-type 行之前,我将在浏览器中收到 500 错误,并在从命令行测试时收到核心段错误消息。

500 错误使调试空间很小。我无法检查任何 stderr 输出。命令行方法使我能够看到更具体的错误消息和调试信息。但我在与 Web 服务器/浏览器不同的环境中进行测试。

那么我如何重新创建具有多个环境变量的 Web 服务器环境,并(如果可能)从 bash 环境中删除环境变量。

我接受基于 bash 脚本的解决方案,我不需要单行本。

最佳答案

您可以通过将它们放在同一行来设置多个变量,例如:

var1=foo var2=bar ./script.cgi

或者您可以将所有内容放在一个文件中(例如,env.sh),内容如下:

export var1=foo
export var2=bar

然后在运行脚本之前获取文件:

source env.sh
./script.cgi

如果要清除继承的shell环境,可以使用env -i

env -i var1=foo var2=bar ./script.cgi

或者,如果您想要一个脚本,请编写一个脚本(例如 script.sh),例如:

export var1=foo
...
./script.cgi

然后像这样调用脚本:

env -i ./script.sh

关于linux - 如何创建具有多个变量的环境以在 Linux 中运行程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41962956/

相关文章:

python - 如何在 python setup.py 中修改文件?

c - 如何接收来自所有子网的 UDP 多播?

php - 从容器中获取 docker 网络的私有(private) ip 以配置 xdebug remote_host

bash - 将文件移动到 sysdate 文件夹

PowerShell:在 'IF' 语句中使用 $env:userprofile

java - 如何根据环境变量打开/关闭Spring Integration channel ?

linux - 写入文件 Linux 终端

bash - 在 Bash 中获取目录的父目录

linux - Docker 环境变量未正确传递

c# - Environment.SpecialFolder.CommonApplicationData 返回 Program Files/App 文件夹