我有一个简单的bash脚本,它修改了一个环境变量,该变量将被随后的二进制文件使用。我的基本剧本:
#!/bin/bash
export DBROOT="NEW_DIRECTORY"
export TERM=xterm
su -c " <test_process> " - omniDBROOT变量被"test_process“用作环境变量。另外,DBROOT被定义为另一个值"OLD_DIRECTORY“作为全局环境变量。脚本的目标是强制"test_process“使用NEW_DIRECTORY值(导出值)。
对于无补丁的bash版本,测试成功了。但是,在修补bash上的global休克bug之后,test_process既不读取DBROOT的导出值,也不读取全局环境变量。就好像"test_process“忽略了导出的和全局的变量。
我没有"test_process“的源代码。这个版本是2.05b.0(1)-release (rpm版本是bash-2.05b-41.7.i386.rpm ),我在上作为第3版运行。
更新:通过设置编译时定义重新编译bash2.05b最后的源代码后的
#define NON_INTERACTIVE_LOGIN_SHELLS
剧本又起作用了。如果没有此定义,bash在-命令之后误解了su字符。
发布于 2014-10-21 15:47:40
你用的软件很古老。
我建议尝试:
su -c "DBROOT='NEW_DIRECTORY' TERM='xterm' <test_process> " - omni这会将环境设置移动到su运行的shell中,而不是依赖su来中继环境。
https://stackoverflow.com/questions/26490661
复制相似问题