Biến môi trường là cài đặt toàn cục cho máy tính Linux, Mac, hoặc Windows, lưu trữ để shell hệ thống dùng khi thực thi lệnh. Nhiều biến được đặt mặc định khi cài đặt hoặc tạo người dùng.
Ví dụ, thư mục home của bạn được thiết lập làm biến môi trường khi đăng nhập. Cách nó trông trong PowerShell phụ thuộc vào hệ điều hành.
Trên Windows:
PS C:\Users\bogus> Get-Variable HOME -valueOnly
C:\Users\bogus
Trên Linux:
pwsh> Get-Variable HOME -valueOnly
HOME=/home/seth
Trên Mac:
pwsh> Get-Variable HOME -valueOnly
HOME=/Users/bogus
Bạn thường không dùng biến môi trường trực tiếp, nhưng chúng được tham chiếu bởi ứng dụng và daemon riêng lẻ khi cần. Tuy nhiên, biến môi trường có ích khi muốn ghi đè cài đặt mặc định, hoặc khi cần quản lý cài đặt mới mà hệ thống không có lý do tự tạo.
Bài viết này về biến môi trường trong môi trường PowerShell mã nguồn mở, áp dụng cho PowerShell chạy trên Windows, Linux, Mac. Người dùng shell Bash nên tham khảo bài viết của tôi về biến môi trường Bash.
Cho bài này, tôi chạy PowerShell trên hệ điều hành mã nguồn mở Linux. Lệnh giống nhau bất kể nền tảng, dù đầu ra khác (ví dụ, không có khả năng username của bạn là seth).
Biến môi trường là gì?
Biến môi trường trong PowerShell là loại biến đặc biệt cung cấp cho hệ thống thông tin về môi trường hệ điều hành. Với biến môi trường, bạn có thể xem và thay đổi biến trong Windows registry, cũng như biến đặt cho phiên đặc biệt.
Trong PowerShell, biến môi trường lưu trong "ổ" Env:, truy cập qua PowerShell environment provider, một subsystem của PowerShell. Đây không phải ổ vật lý, mà hệ thống file ảo.
Vì biến môi trường tồn tại trong ổ Env:, bạn phải thêm tiền tố Env: vào tên biến khi tham chiếu. Thay vào đó, bạn có thể đặt vị trí làm việc vào ổ Env: bằng lệnh Set-Location để đối xử tất cả biến môi trường như biến cục bộ:
PS> Set-Location Env:
PS> pwd
Path
----
Env:/
Biến môi trường truyền thông tin phiên đăng nhập đến máy tính. Ví dụ, khi ứng dụng cần xác định nơi lưu file dữ liệu mặc định, nó thường gọi biến môi trường HOME. Bạn có thể chưa bao giờ tự đặt biến HOME, nhưng nó tồn tại vì hầu hết biến môi trường được quản lý bởi hệ điều hành.
Bạn có thể xem tất cả biến môi trường trên hệ thống với lệnh Get-ChildItem từ trong ổ Env:. Danh sách dài, nên pipe qua out-host -paging để dễ đọc:
PS> Get-ChildItem | out-host -paging
LOGNAME seth
LS_COLORS rs=0:mh=00:bd=48;5;232;38;5;
MAIL /var/spool/mail/seth
MODULEPATH /etc/scl/modulefiles:/etc/scl/modulefiles
MODULESHOME /usr/share/Modules
OLDPWD /home/seth
PATH /opt/microsoft/powershell/6:/usr/share/Modules/bin
PSModulePath /home/seth/.local/share/powershell/Modules
PWD /home/seth
[...]
Nếu bạn không ở ổ Env:, bạn có thể làm tương tự bằng cách thêm Env: vào lệnh:
PS> Get-ChildItem Env: | out-host -paging
LOGNAME seth
LS_COLORS rs=0:mh=00:bd=48;5;232;38;5;
MAIL /var/spool/mail/seth
MODULEPATH /etc/scl/modulefiles:/etc/scl/modulefiles
Biến môi trường có thể đặt, gọi lại, xóa với cú pháp giống biến bình thường. Giống biến khác, bất cứ gì bạn đặt trong phiên chỉ áp dụng cho phiên đó.
Nếu muốn thay đổi vĩnh viễn biến, phải thay trong Windows Registry trên Windows, hoặc file cấu hình shell (như ~/.bashrc) trên Linux/Mac. Nếu chưa quen dùng biến PowerShell, đọc bài biến PowerShell của tôi trước.
Biến môi trường dùng làm gì?
Các biến môi trường khác nhau được dùng bởi vài hệ thống khác nhau trong máy. Biến PATH của bạn quan trọng cho shell, ví dụ, nhưng kém quan trọng hơn đối với, nói Java (cũng có path, nhưng trỏ đến thư viện Java quan trọng). Tuy nhiên, biến USER được dùng bởi vài tiến trình khác để xác định ai yêu cầu dịch vụ.
Wizard cài đặt, như framework Nullsoft Scriptable Install System (NSIS) mã nguồn mở, cập nhật biến môi trường khi cài ứng dụng mới. Đôi khi, khi cài thứ gì ngoài công cụ dự định của hệ điều hành, bạn có thể phải tự quản lý biến môi trường. Hoặc, bạn có thể chọn thêm biến môi trường cho sở thích.
Khác biệt với biến thường?
Khi tạo biến thường, biến được coi là cục bộ, nghĩa là không được định nghĩa bên ngoài shell tạo nó.
Ví dụ, tạo biến:
PS> Set-Variable -Name VAR -Value "example"
PS> gv VAR -valueOnly
example
Khởi chạy shell mới, ngay từ shell hiện tại:
PS> pwsh
PS c:\> gv VAR -valueOnly
gv : Cannot find a variable with the name 'example'.
Biến môi trường, mặt khác, có ý định phạm vi toàn cục. Chúng tồn tại tách biệt shell tạo ra và có sẵn cho tiến trình khác.
Cách đặt biến môi trường?
Khi đặt biến môi trường, bạn nên rõ ràng đó là biến môi trường bằng ký hiệu $Env::
PS Env:/> $Env:FOO = "hello world"
PS Env:/> Get-ChildItem FOO
hello world
Làm test, khởi chạy phiên mới và truy cập biến vừa tạo. Vì biến là biến môi trường, bạn phải thêm tiền tố $Env::
PS Env:/> pwsh
PS c:\> $Env.FOO
hello world
Dù bạn làm biến có sẵn cho tiến trình con, nó vẫn chỉ là biến tạm thời. Nó hoạt động, bạn xác minh tồn tại, dùng từ bất kỳ tiến trình, nhưng bị hủy khi shell tạo nó đóng.
Cách đặt biến môi trường trong profile?
Để ép biến môi trường tồn tại qua các phiên, bạn phải thêm vào profile PowerShell, như profile CurrentUser,AllHosts, nằm trong HOME/Documents/Profile.ps1:
PS> Add-Content -Path $Profile.CurrentUserAllHosts -Value '$Env:FOO = "hello world"'
Với dòng này thêm, bất kỳ phiên PowerShell nào khởi chạy sẽ khởi tạo biến môi trường FOO và đặt giá trị hello world.
Hiện có sáu profile mặc định kiểm soát phiên PowerShell, tham khảo blog dev Microsoft để biết thêm.
Cách khám phá biến môi trường mới?
Bạn có thể tạo và thao tác biến môi trường tùy ý, và một số ứng dụng làm chính điều đó. Thực tế này có nghĩa là nhiều biến môi trường của bạn không được hầu hết ứng dụng dùng, và nếu bạn thêm biến tùy ý, một số có thể không được dùng bởi gì cả.
Vậy câu hỏi: Làm sao biết biến môi trường nào có ý nghĩa? Câu trả lời nằm trong tài liệu ứng dụng.
Python, ví dụ, đề xuất thêm path Python thích hợp vào biến môi trường Path khi cài. [Note: PATH?] Nếu từ chối, bạn có thể tự đặt giá trị bây giờ vì biết cách sửa biến môi trường.
Điều tương tự đúng cho bất kỳ ứng dụng bạn cài: Installer kỳ vọng thêm biến thích hợp vào môi trường, nên bạn không bao giờ cần sửa Env: thủ công. Nếu bạn phát triển ứng dụng, installer của bạn nên làm tương tự cho người dùng.
Để khám phá biến quan trọng cho từng ứng dụng, tham khảo tài liệu người dùng và nhà phát triển của chúng.