Хотя вы уже удалили определенную переменную окружения (например, ANTHROPIC_BASE_URL) из ~/.zshrc, при проверке в терминале она, к удивлению, все еще на месте!
Даже повторный запуск source ~/.zshrc совершенно бесполезен?
Как проверить, существует ли переменная окружения и каким конфигурационным файлом она была записана?
Перед очисткой сначала необходимо подтвердить, остается ли переменная в текущей памяти и какой конфигурационный файл загружает ее автоматически.
1. Проверка переменных в памяти
Проверьте, остается ли переменная окружения в памяти текущего Terminal
env | grep -i anthropic
2. Поиск источников в конфигурационных файлах
Тщательно выполните поиск по конфигурационным файлам Zsh, Bash и файлам системного уровня, чтобы узнать, какой файл записал переменную
grep -rn "ANTHROPIC_BASE_URL" ~/.zshrc ~/.zprofile ~/.zshenv ~/.zlogin ~/.bashrc ~/.bash_profile ~/.profile /etc/zshenv /etc/zprofile /etc/profile /etc/environment 2>/dev/null
Почему после изменения .zshrc старые переменные окружения остаются?
На самом деле, при открытии терминала переменные окружения уже загружены в “память” этого сеанса.
Даже если вы измените файл или повторно выполните source ~/.zshrc, это лишь “перезагрузит” содержимое конфигурационного файла и не удалит автоматически старые переменные, существующие в памяти.
Команда
sourceтолько перезаписывает или добавляет переменные, и не “удаляет” переменные за вас
Самые простые решения на данный момент следующие:
| Метод очистки | Команда / Действие | Описание |
|---|---|---|
| Открыть новое окно | Открыть совершенно новую вкладку терминала | Новый Shell Process заново прочитает свежий ~/.zshrc |
| Ручная очистка | unset ANTHROPIC_BASE_URL |
Удаляет указанную переменную окружения напрямую из текущей памяти |
| Сброс shell | exec zsh -l |
Перезагружает состояние памяти текущего Shell |
Повторное открытие окон терминала все еще не помогает? Раскройте 3 главные причины
Почему иногда даже после открытия совершенно нового окна терминала старая переменная окружения все еще не исчезает?
В этом случае проблема кроется уже не в ~/.zshrc, а наследуется от “Родительского процесса (Parent Process)”!
Когда вы запускаете терминал из приложения, дочерний процесс напрямую копирует снимок переменных окружения родительского процесса на тот момент.
Если вы столкнулись с такой упрямой переменной окружения, обычно это связано со следующими тремя распространенными причинами:
| Тип | Причина | Решение |
|---|---|---|
| Встроенный терминал IDE | VS Code, Cursor или Antigravity записали снимок переменных окружения при запуске |
Нажмите Cmd + Q, чтобы полностью выйти из IDE, затем откройте снова |
| Приложение Terminal не закрыто | Terminal или iTerm2 на Mac только закрыли окна (Cmd + W), основная программа работает в фоновом режиме |
Нажмите Cmd + Q, чтобы полностью выйти из приложения Terminal |
| tmux | Фоновый Server tmux работает непрерывно, новые вкладки наследуют настройки запуска |
Выполните tmux kill-server, чтобы закрыть фоновую службу |
Перезапуск программы все еще неэффективен? Проверьте сторонние утилиты и системные настройки
Если все три вышеуказанных способа не помогли и переменная окружения упрямо появляется в Terminal, возможно, за кулисами работают системные настройки более высокого уровня или сторонние утилиты.
Более высокие системные привилегии или скрипты-обертки (wrapper) будут автоматически восстанавливать переменные окружения при каждом запуске
В этом случае вы можете использовать следующие две основные команды обнаружения:
| Цель проверки | Команда | Описание |
|---|---|---|
| Системные глобальные переменные | launchctl getenv ANTHROPIC_BASE_URL |
Проверить, используют ли сторонние прокси-инструменты launchctl setenv для установки глобальных переменных |
| Скрипты-обертки команд | type claude |
Проверить, является ли текущая команда оригинальным исполняемым файлом или обернута в скрипт wrapper со значениями по умолчанию |
Стандартные шаги по устранению неполадок для полной очистки переменных окружения
В следующий раз, когда вы будете изменять или удалять переменные окружения в ~/.zshrc, не забудьте сначала проверить: наследует ли текущий терминал настройки старого Parent Process?
Следуйте этой последовательности проверки, чтобы легко найти первопричину и решить проблему:
- Сначала выполните
unset ИМЯ_ПЕРЕМЕННОЙили откройте совершенно новое окно терминала. - Если вы используете
IDE, такую какVS CodeилиCursor, нажмитеCmd + Qдля полного перезапускаIDE. - Если вы используете
tmux, выполнитеtmux kill-serverдля сброса фоновой службы. - Проверьте команды
launchctl getenvиtypeдля проверки системного уровня и скриптов-оберток.