2014-10-17 8 views
0

В моем файле .profile есть переменная RESLOC, которая время от времени меняется. Поэтому я написал сценарий, просто беря ввод от пользователя по новому имени.Sourcing .profile из другого скрипта в ksh

кошка tst.sh

echo "Enter the Result Location name where you would like your results to go." 
read RESL 
perl -pi.bak -e "s/([\s]+)RESLOC=\/result\/([\S]+)/$1 RESLOC=\/result\/${RESL}/g" /user/.profile 
cd /user 
. /user/.profile 
echo "$RESLOC" 

Последнее утверждение эха дает выход в качестве значения заданного пользователя. Но когда я выполняю echo $ RESLOC после того, как сценарий был выполнен в терминале, он отображает старое значение.

O/P сценария:

Enter the Result Location name where you would like your results to go. 
Release12 


/user/Release12 

Когда попытка отобразить RESLOC после выполнения завершения.

echo $RESLOC 
/user/Release11 

Файл .profile обновлен Release12. Но это не правильно. Пожалуйста, помогите.

ответ

1

При запуске tst.sh запускается новый процесс оболочки, и когда он заканчивается, ваша среда вернется к предыдущему экземпляру оболочки, то есть к той, из которой вы запустили tst.sh.

Чтобы изменить среду в текущей оболочке, вам нужно будет указать tst.sh;

. tst.sh 

Это приведет к запуску tst.sh в текущей оболочке и не вызовет новый процесс оболочки.

Смежные вопросы