我有一个简单的 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