почему мои переменные среды постоянны? - PullRequest
0 голосов
/ 24 декабря 2010

Эта проблема беспокоила меня некоторое время. Иногда я устанавливал переменную среды в моем файле .tcshrc. Как только мне это больше не нужно, я бы удалил его из моего файла .tcshrc; однако по какой-то причине переменная стала постоянной в моей оболочке. Я думал, что все в файле .tcshrc не должно быть постоянным после того, как настройки прокомментированы или удалены. Это конкретно случилось с новым PATH, который я хотел добавить. Теперь, когда он мне больше не нужен, его удаление из файла .tcshrc ничего не делает.

Ответы [ 2 ]

2 голосов
/ 24 декабря 2010

Ваш .tcshrc является исполняемым скриптом.Вы должны фактически выполнить это, чтобы изменения в нем имели какой-либо эффект.Обычно это происходит (автоматически) при запуске новой оболочки.

Другая проблема, с которой вы можете столкнуться, заключается в том, что переменные среды наследуются дочерними процессами.Если ваш .tcshrc добавляет к переменным, а не перезаписывает их (что не редкость для PATH), это может вызвать поведение, которое вы видите.У вашего текущего процесса оболочки есть дополнительная запись в PATH, и хотя дочерняя оболочка не добавляет ее в PATH (из-за вашего недавнего изменения .tcshrc), она уже там.

1 голос
/ 24 июля 2011

Переменные окружения, установленные в .tcshrc, влияют на любую оболочку tcsh , которая использовала эту версию .tcshrc .Изменение файла влияет на любые будущие процессы tcsh, которые вы запускаете, но не влияет ни на какие существующие процессы.Как только переменная установлена ​​в процессе оболочки, единственный способ отменить ее - использовать команду «unsetenv» (или «setenv» с другим значением).

Любые переменные среды в текущем процессе tcsh (тот, который использовал старую версию .tcshrc), также будет унаследован всеми процессами, которые вы вызываете из tcsh.

Например:

  1. Запустите новый процесс tcsh с помощью setenv FOO BARв вашем .tcshrc.Для $ FOO установлено значение "BAR".
  2. Измените файл .tcshrc, удалив команду "setenv". Это не влияет на любую переменную среды в любом запущенном процессе.
  3. Запустите bash из командной строки tcsh.У процесса оболочки bash $ FOO установлено значение «BAR», потому что он унаследовал его от своего родительского процесса (вашего процесса tcsh), который получил его из old .tcshrc файла.
  4. Logи снова войдите в систему. Все процессы, для которых $ FOO было установлено в значение «BAR», теперь исчезли.У вас есть новый процесс tcsh, который читает из new .tcshrc, поэтому $ FOO не установлен.
...