Объем "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
), вы почти наверняка увидите экспортируемую переменную.