это не работает, когда я помещаю предложение setenv в блок if-end?

#linux #tcsh

Вопрос:

 #test.tcsh
#!bin/tcsh
setenv A a;
if($argv[1]=="B") then 
  setenv B b;
endif
 

когда я выступаю

 tcsh  test.tcsh B
echo $B
 

оказывается, что

 undined parameter
 

можете ли вы сказать мне, почему???

Комментарии:

1. Ребенок не может изменить окружение родителя.

2. Это не сработает ни с tcsh test.tcsh A тем, ни с другим. Как и выше, дочерние процессы не могут изменять среду родительских процессов. В этом случае ваш терминальный сеанс является родительским, и tcsh test.tcsh он выполняется как дочерний для этого родителя. Когда это будет сделано, от дочернего процесса ничего не останется, если только он не будет записан в файл. (Именно так вам придется изменить родительскую среду). Удачи!

3. Используйте source test.tcsh для его выполнения в среде исходной оболочки.