我有一个简单的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 bug进行修补之后,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
个字符
答案 0 :(得分:4)
这是你正在使用的非常古老的软件。
我建议尝试:
su -c "DBROOT='NEW_DIRECTORY' TERM='xterm' <test_process> " - omni
这会将环境设置移动到由su
运行的shell,而不是依靠su
来传播环境。