1

我有一个简单的 bash 脚本,它修改将由后续二进制文件使用的环境变量。下面是我的基本脚本:

#!/bin/bash
export DBROOT="NEW_DIRECTORY" 
export TERM=xterm
su  -c " <test_process> " - omni

DBROOT 变量被“test_process”用作环境变量。此外,DBROOT 使用另一个值“OLD_DIRECTORY”定义为全局环境变量。该脚本的目标是强制“test_process”使用 NEW_DIRECTORY 值(导出值)。

使用未修补的 bash 版本,测试有效。但是,在 bash 上修补 shellshock 错误后,test_process 不会读取 DBROOT 的导出值,也不会读取全局环境变量。就好像“test_process”忽略了导出和全局变量。

我没有“test_process”的源代码。bash 版本是2.05b.0(1)-release(rpm 版本是 bash-2.05b-41.7.i386.rpm ),我在Red Hat Enterprise Linux AS 版本 3上运行

更新: 通过设置编译时定义重新编译 bash 2.05b 最后一个源之后

#define NON_INTERACTIVE_LOGIN_SHELLS

该脚本再次起作用。如果没有这个定义,bash 会误解命令-后的字符su

4

1 回答 1

4

那是您正在使用的非常古老的软件。

我建议尝试:

su -c "DBROOT='NEW_DIRECTORY' TERM='xterm' <test_process> " - omni

这会将环境设置移动到由 运行的 shell 中su,而不是依赖于su中继环境。

于 2014-10-21T15:47:40.067 回答