Объем "setenv" в csh против "экспорта" в bash

из того что я читал, setenv в csh и export в bash эквивалентны. Тем не менее, я обнаружил некоторые странные проблемы во время работы с этими двумя.

когда я открываю шпаклевку и начинаю печатать:

setenv TEMP yes
echo $TEMP  //this give me "yes"

затем я иду в bash и набираю

echo $TEMP //this give me "yes" as well

однако, если я сделаю это в обратном порядке, это не даст тех же результатов. В частности, когда я иду в bash первым и набираю

export TEMP=no
echo $TEMP //this give me "no"

затем я возвращаюсь в csh и тип

echo $TEMP // this give me "Undefined Variable"

разве это не должно дать мне "нет"? Я что-то упускаю?

спасибо!

1 ответов


экспорт переменной означает, что копия этой переменной помещается в среду любых вновь созданных дочерних процессов. Это копия переменной; если дочерний процесс изменяет переменную, родитель не видит изменения. Более того, если дочерняя переменная экспортируется, она не становится видимой в родительской.

следовательно, ваши два случая асимметричны. Когда вы начинаете в csh, экспортируете переменную, а затем запускаете bash, bash видит экспортированную переменную. Когда вы затем экспортируйте новую переменную в bash и выйдите из bash, чтобы вернуться в csh, все переменные, созданные в сеансе bash, исчезают.

Если вы должны были экспортировать переменную в bash, а затем запустить дочерний csh (набрав csh), вы почти наверняка увидите экспортируемую переменную.