Dù bạn đã xóa một biến môi trường (như ANTHROPIC_BASE_URL) khỏi ~/.zshrc, nhưng khi kiểm tra trong terminal, nó vẫn còn ở đó một cách đáng kinh ngạc!
Ngay cả khi chạy lại source ~/.zshrc cũng hoàn toàn vô ích?
Làm thế nào để kiểm tra biến môi trường có tồn tại không và được ghi bởi tệp cấu hình nào?
Trước khi dọn dẹp, đầu tiên bạn cần xác định xem biến đó còn tồn tại trong bộ nhớ hiện tại hay không, và tệp cấu hình nào đang tự động tải nó.
1. Kiểm tra biến trong bộ nhớ
Kiểm tra xem biến môi trường có còn sót lại trong bộ nhớ Terminal hiện tại hay không
env | grep -i anthropic
2. Tìm kiếm nguồn tệp cấu hình
Tìm kiếm toàn diện trong các tệp cấu hình của Zsh, Bash và cấp hệ thống để tìm tệp đã ghi biến đó
grep -rn "ANTHROPIC_BASE_URL" ~/.zshrc ~/.zprofile ~/.zshenv ~/.zlogin ~/.bashrc ~/.bash_profile ~/.profile /etc/zshenv /etc/zprofile /etc/profile /etc/environment 2>/dev/null
Tại sao sau khi sửa .zshrc thì biến môi trường cũ vẫn còn?
Thực ra, khi bạn mở terminal, biến môi trường đã được tải vào “bộ nhớ” của phiên kết nối đó rồi.
Ngay cả khi bạn sửa tệp hoặc chạy lại source ~/.zshrc, điều này chỉ “tải lại” nội dung trong tệp cấu hình chứ không tự động xóa các biến cũ đã có trong bộ nhớ.
Lệnh
sourcechỉ ghi đè hoặc thêm biến, chứ không “xóa” biến giúp bạn
Lúc này, các giải pháp đơn giản nhất như sau:
| Phương pháp xóa | Lệnh / Thao tác | Mô tả |
|---|---|---|
| Mở cửa sổ mới | Mở một tab terminal mới hoàn toàn | Shell Process mới sẽ đọc lại tệp ~/.zshrc mới nhất |
| Xóa thủ công | unset ANTHROPIC_BASE_URL |
Xóa trực tiếp biến môi trường chỉ định khỏi bộ nhớ hiện tại |
| Đặt lại shell | exec zsh -l |
Tải lại trạng thái bộ nhớ của Shell hiện tại |
Mở lại cửa sổ terminal vẫn không có tác dụng? Truy tìm 3 nguyên nhân chính
Tại sao đôi khi dù đã mở một cửa sổ terminal mới hoàn toàn, biến môi trường cũ vẫn tiếp tục tồn tại?
Trong trường hợp này, vấn đề không còn nằm ở ~/.zshrc nữa, mà là sự kế thừa từ “Tiến trình cha (Parent Process)”!
Khi bạn khởi chạy terminal từ một ứng dụng phần mềm, tiến trình con sẽ sao chép trực tiếp bản chụp biến môi trường tại thời điểm đó của tiến trình cha.
Nếu gặp phải biến môi trường ngoan cố như vậy, thường do 3 nguyên nhân phổ biến sau:
| Loại | Nguyên nhân | Cách giải quyết |
|---|---|---|
| IDE Built-in Terminal | VS Code, Cursor hoặc Antigravity đã ghi lại bản chụp biến môi trường khi khởi động |
Nhấn Cmd + Q để thoát hoàn toàn IDE rồi mở lại |
| Ứng dụng Terminal chưa đóng | Terminal hoặc iTerm2 trên Mac chỉ đóng cửa sổ (Cmd + W), chương trình chính vẫn chạy ngầm |
Nhấn Cmd + Q để thoát hoàn toàn ứng dụng Terminal |
| tmux | Server chạy ngầm của tmux hoạt động liên tục, các tab mới sẽ luôn kế thừa cài đặt lúc khởi động |
Chạy tmux kill-server để đóng dịch vụ chạy ngầm |
Khởi động lại phần mềm vẫn không hiệu quả? Kiểm tra công cụ bên thứ ba và cài đặt cấp hệ thống
Nếu đã thử cả 3 cách trên mà biến môi trường vẫn cứng đầu xuất hiện trong Terminal, có thể do cài đặt hệ thống cấp cao hơn hoặc công cụ bên thứ ba đang can thiệp.
Quyền hệ thống cao hơn hoặc script bọc (wrapper) sẽ khiến biến môi trường tự động khôi phục mỗi khi khởi động
Trong trường hợp này, bạn có thể sử dụng 2 lệnh kiểm tra chính sau:
| Mục tiêu kiểm tra | Lệnh | Mô tả |
|---|---|---|
| Biến toàn cục hệ thống | launchctl getenv ANTHROPIC_BASE_URL |
Kiểm tra xem có công cụ proxy bên thứ ba nào dùng launchctl setenv để ghi biến toàn cục không |
| Script bọc lệnh | type claude |
Kiểm tra xem lệnh hiện tại là tệp thực thi gốc hay đã bị bọc thành script wrapper chứa biến mặc định |
Các bước xử lý chuẩn để xóa triệt để biến môi trường
Lần tới khi sửa hoặc xóa biến môi trường trong ~/.zshrc, hãy nhớ kiểm tra trước: Terminal hiện tại có đang kế thừa cài đặt Parent Process cũ không?
Theo thứ tự kiểm tra dưới đây, bạn có thể dễ dàng tìm ra nguyên nhân và giải quyết vấn đề:
- Chạy lệnh
unset TÊN_BIẾNtrước hoặc mở cửa sổ terminal mới. - Nếu dùng
IDEnhưVS CodehoặcCursor, nhấnCmd + Qđể khởi động lại hoàn toànIDE. - Nếu dùng
tmux, chạytmux kill-serverđể đặt lại dịch vụ chạy ngầm. - Kiểm tra lệnh
launchctl getenvvàtypeđể rà soát cấp hệ thống và script bọc.