Một hook VPN xuất điểm cuối API sẽ thay đổi môi trường của các tiến trình mà nó khởi chạy, không phải của terminal đã mở sẵn khi đường hầm được dựng lên. Chính sự khác biệt duy nhất đó giải thích phần lớn các báo cáo «công cụ vẫn gọi điểm cuối công khai». Có hai nơi khả thi để đặt cài đặt này, và lựa chọn phụ thuộc vào ai dùng nó và nó thay đổi thường xuyên đến đâu. Hãy so sánh cả hai trước khi thêm một script khởi động khác.

Hai nơi cài đặt có thể sống

Lựa chọn thứ nhất là một tiền tố trên chính lệnh: giá trị chỉ tồn tại cho lần gọi đó và biến mất cùng nó. Lựa chọn thứ hai là một lần xuất bên trong hook kết nối, tới được mọi tiến trình mà hook khởi chạy sau thời điểm đó. Chúng khác nhau ở phạm vi và vòng đời, không phải ở cú pháp, và chính sự khác biệt đó quyết định phần lớn các lỗi.

PropertyPrefix on the commandExport from the hook
Who receives itThat invocation onlyChildren the hook starts
LifetimeUntil the process exitsUntil the hook's own session ends
LeakageScoped to one commandApplies to later commands in that session
Repeat costEvery invocationOnce per connection
Works for an open editorNo, unless the editor is started with itNo

Bảng này làm hook trông rẻ và che giấu hóa đơn thật: nó cũng chọn điểm cuối riêng tư cho những lệnh không liên quan gì đến công việc. Hãy đọc từng dòng như một ràng buộc, không phải một sở thích. Nếu điểm cuối thay đổi theo từng công việc, tiền tố thắng về độ chính xác dù tốn một lần nhấn phím.

Vì sao hook không thể chạm tới một shell đã mở

Các biến môi trường được trao cho tiến trình khi ảnh tiến trình được tạo. Một shell khởi động trước khi kết nối vẫn giữ bản sao mà nó nhận được, và một lần xuất thực hiện trong hook không phải là phát sóng tới mọi tiến trình trên máy. Chỉ các tiến trình con của chính hook mới thừa hưởng nó. Các tiến trình con của shell nhận lấy những gì shell nắm giữ vào lúc chúng khởi động, và đó là lý do cùng một lệnh có thể chạy được trong terminal này mà hỏng trong terminal khác.

Điều tương tự áp dụng cho trình soạn thảo đồ họa. Máy chủ tiện ích mở rộng, terminal tích hợp và máy chủ ngôn ngữ nền của nó được tách nhánh lúc khởi chạy và giữ bản sao riêng. Mở lại thư mục không nhất thiết khởi động lại các tiến trình con đó, nên cài đặt bạn thêm vào vẫn không bao giờ đến nơi.

Phép thử rẻ nhất là in biến ra từ nơi thất bại, không phải từ shell đang chạy tốt. Nếu tiến trình thất bại khởi động trước đường hầm, lần xuất đó chưa từng có cơ hội.

Dạng theo từng lệnh, viết ra

Một tiền tố giữ lựa chọn hiển thị ngay trong lệnh dùng nó, điều này hữu ích khi điểm cuối thay đổi giữa các công việc:

env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool

Lệnh này chỉ là ví dụ: my-work-tool là một chỗ giữ chỗ và INTERNAL_API không phải tiêu chuẩn của VPN, nên hãy thay bằng cài đặt được ghi trong tài liệu của chương trình bạn thực sự chạy và máy chủ đã được phê duyệt của bạn. Đừng đặt token hay mật khẩu trên cùng dòng, vì chúng sẽ nằm trong lịch sử của shell.

Khi nhiều lệnh thuộc một công việc, một script bao bọc ngắn đã được rà soát sẽ đặt các biến rồi khởi chạy chúng. Cách này giữ một định nghĩa duy nhất mà không biến giá trị thành toàn cục cho mọi lệnh tương lai trong terminal.

Tải lại, khởi động lại hoặc để yên

Với một công cụ đang chạy, hãy ưu tiên lần tải lại hoặc hồ sơ không gian làm việc của chính nó nếu có. Nếu không, hãy lưu việc đang làm và khởi động lại thành phần đọc cài đặt, thường là máy chủ ngôn ngữ chứ không phải cửa sổ soạn thảo. Khởi động lại cửa sổ và cho rằng các tiến trình con đã đi theo chính là lý do một lần tải lại trông như không hoạt động.

Ngắt kết nối là một quyết định riêng. Tạm dừng, đóng hoặc kết nối lại thuộc về ứng dụng, và biến điểm cuối không điều khiển việc đó. Hãy coi biến là cấu hình chọn một địa chỉ, không phải quy tắc về lưu lượng mạng nào được dùng sau đó, và hai vấn đề vẫn tách rời được.

Bài viết liên quan