如何禁用AIX系统中/usr/bin/sh清除LIBPATH等环境变量的行为?
AIX系统中/usr/bin/sh清除LIBPATH等环境变量的问题及解决方案需求
我希望shell不要修改LIBPATH及多数其他环境变量。在部分而非全部AIX系统中,/usr/bin/sh(作为system(3)背后的shell)会清除LIBPATH、LD_LIBRARY_PATH和NLSPATH变量,但ksh和bash没有这种行为。
测试脚本
export LIBPATH=/none1 LD_LIBRARY_PATH=/none2 NLSPATH=/none3 LiBPATH=/none4 for shell in /usr/bin/sh ksh bash; do echo "=== $shell" $shell -c env | grep /none done
预期输出(无变量清除的AIX系统)
=== /usr/bin/sh LiBPATH=/none4 NLSPATH=/none3 LIBPATH=/none1 LD_LIBRARY_PATH=/none2 === ksh LiBPATH=/none4 NLSPATH=/none3 LIBPATH=/none1 LD_LIBRARY_PATH=/none2 === bash LiBPATH=/none4 NLSPATH=/none3 LIBPATH=/none1 LD_LIBRARY_PATH=/none2
存在变量清除行为的系统输出
=== /usr/bin/sh LiBPATH=/none4 === ksh LiBPATH=/none4 NLSPATH=/none3 LIBPATH=/none1 LD_LIBRARY_PATH=/none2 === bash LiBPATH=/none4 NLSPATH=/none3 LIBPATH=/none1 LD_LIBRARY_PATH=/none2
问题
如何禁用该变量清除行为?我希望通过禁用它恢复system(3)与旧版AIX及Linux的兼容性。
系统差异
- 截至2023-05-11,
$(oslevel -s)=7200-04-03-2038的系统不会清除这些变量。 - 2023-05-12该系统经变更重启后,开始清除变量,系统版本仍为7200-04-03-2038(主机为gcc119.fsffrance.org,属于GCC编译农场)。
oslevel为7100-05-06-2028的系统(gcc111.fsffrance.org,GCC编译农场成员)不会清除变量。
变量清除系统的shell版本
$ lslpp -l bos.rte.shell Fileset Level State Description ---------------------------------------------------------------------------- Path: /usr/lib/objrepos bos.rte.shell 7.2.4.2 COMMITTED Shells (bsh, ksh, csh) Path: /etc/objrepos bos.rte.shell 7.2.4.2 COMMITTED Shells (bsh, ksh, csh) $ ls -l /usr/bin/ksh /usr/bin/sh -r-xr-xr-x 5 bin bin 317840 Sep 23 2020 /usr/bin/ksh -r-xr-xr-x 5 bin bin 317840 Sep 23 2020 /usr/bin/sh
系统包版本信息
$ lslpp -Lc all | grep ':[0-9]\{4\}$' | sed 's/.*://' | sort | uniq -c 1 1241 297 1543 2 1614 8 1642 6 1731 4 1806 42 1837 46 1845 2 1913 332 1937 43 2015 1 2027 117 2037
内容的提问来源于stack exchange,提问作者Noah Misch
相关产品推荐
相关产品推荐

