Để thực hiện tương đương với cú pháp Unix, bạn không chỉ phải đặt biến môi trường mà còn phải đặt lại biến này về giá trị cũ sau khi thực hiện lệnh. Tôi đã hoàn thành điều này cho các lệnh phổ biến mà tôi sử dụng bằng cách thêm các chức năng tương tự như sau vào hồ sơ PowerShell của mình.
function cmd_special()
{
$orig_master = $env:app_master
$env:app_master = 'http://host.example.com'
mycmd $args
$env:app_master = $orig_master
}
Vì vậy, mycmd
một số tệp thực thi hoạt động khác nhau tùy thuộc vào giá trị của biến môi trường app_master
. Bằng cách xác định cmd_special
, bây giờ tôi có thể thực thi cmd_special
từ dòng lệnh (bao gồm các tham số khác) với app_master
biến môi trường được đặt ... và nó được đặt lại (hoặc thậm chí không được đặt) sau khi thực hiện lệnh.
Có lẽ, bạn cũng có thể làm điều này đặc biệt cho một lệnh gọi duy nhất.
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
Nó thực sự sẽ dễ dàng hơn thế này, nhưng rõ ràng đây không phải là trường hợp sử dụng được PowerShell hỗ trợ sẵn. Có thể một phiên bản trong tương lai (hoặc chức năng của bên thứ ba) sẽ hỗ trợ trường hợp sử dụng này. Sẽ thật tuyệt nếu PowerShell có một lệnh ghép ngắn có thể thực hiện việc này, ví dụ:
with-env app_master='http://host.example.com' mycmd
Có lẽ một chuyên gia về PowerShell có thể gợi ý cách người ta có thể viết một lệnh ghép ngắn như vậy.