SunOS 5.10 /bin/sh && 更改环境变量不起作用

SunOS 5.10 /bin/sh && 更改环境变量不起作用

当我在 中更改环境变量时/bin/sh,它仅在新命令后生效export,例如:

$ which ant
/usr/sfw/bin/ant
$ env | grep ANT
ANT_HOME=/usr/local/apache-ant-1.9.8
$ PATH=$ANT_HOME/bin:$PATH
$ which ant 
/usr/sfw/bin/ant
$ env | egrep '^PATH='
PATH=/usr/local/gcc-492/bin:/export/home/sisis/mpi-V50:...
$ export PATH
$ which ant
/usr/local/apache-ant-1.9.8/bin/ant
$ env | egrep '^PATH='
PATH=/usr/local/apache-ant-1.9.8/bin:/usr/local/gcc-492/bin:/export/home/sisis/mpi-V50 ...

这是一个错误还是一个新功能?

马蒂亚斯

答案1

功能。未导出的变量对于分叉到的程序不可见。导出它们以使其可见。PATH从父进程继承,并将按原样传递给子进程,例如env;只有在标记为之后,exportshell 进程中的任何更改才会对子进程可见。这也可以在传家宝伯恩贝壳

$ PATH=/usr/bin:/bin
$ echo $PATH
/usr/bin:/bin
$ env | grep \^PATH
PATH=/Users/jdoe/bin:/Users/jdoe/usr/darwin15.0-x86_64/bin:/Users/jdoe/perl5/bin:...
$ export PATH
$ env | grep \^PATH
PATH=/usr/bin:/bin
$ PATH=/usr/local/bin:/usr/bin:/bin
$ echo $PATH
/usr/local/bin:/usr/bin:/bin
$ env | grep \^PATH
PATH=/usr/local/bin:/usr/bin:/bin
$

现代 (或其他) shell 有所不同;例如 ZSHPATH默认导出:

$ PS1='%% ' zsh -f
% echo ${(t)PATH}
scalar-export-special
% 

然而这种不同的行为对 SunOSsh或 heirloom bourne没有影响sh

相关内容