SunOS 5.10 / bin / sh && изменение переменных окружения не работает

Когда я меняю переменную env в / 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 ...

Это ошибка или новая функция?

Matthias

0
задан 2 February 2017 в 15:32
1 ответ

Feature. Неэкспортированные переменные не видны разветвленным программам. Экспортируйте их, чтобы сделать их видимыми. PATH наследуется от родительского процесса и будет передан как есть дочерним процессам, таким как env ; только после установки флажка export любые изменения в процессе оболочки будут видны дочерним процессам. Это также можно наблюдать в реликвии раковины Борна :

$ 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
$

Современные (или даже другие) раковины отличаются;ZSH, например, экспортирует PATH по умолчанию:

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

Однако это другое поведение не влияет на SunOS sh или семейную реликвию sh .

3
ответ дан 4 December 2019 в 12:21

Теги

Похожие вопросы