如何为 Linux 中的 运行 程序创建具有多个变量的环境?
How can I create an environment with several variables for running a program in Linux?
我正在编写一个将用作 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
输出。命令行方法使我能够看到更具体的错误消息和调试信息。但我在不同于网络 server/browser.
的环境中进行测试
那么我如何使用多个环境变量重新创建 Web 服务器环境,并(如果可能)从 bash 环境中删除环境变量。
我可以使用 bash 基于脚本的解决方案,我不需要一个衬垫。
您可以通过将它们放在同一行来设置多个变量,例如:
var1=foo var2=bar ./script.cgi
或者您可以将所有内容放在一个文件中(例如,env.sh
),内容如下:
export var1=foo
export var2=bar
然后 source
运行 脚本之前的文件:
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
我正在编写一个将用作 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
输出。命令行方法使我能够看到更具体的错误消息和调试信息。但我在不同于网络 server/browser.
那么我如何使用多个环境变量重新创建 Web 服务器环境,并(如果可能)从 bash 环境中删除环境变量。
我可以使用 bash 基于脚本的解决方案,我不需要一个衬垫。
您可以通过将它们放在同一行来设置多个变量,例如:
var1=foo var2=bar ./script.cgi
或者您可以将所有内容放在一个文件中(例如,env.sh
),内容如下:
export var1=foo
export var2=bar
然后 source
运行 脚本之前的文件:
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