Git PowerShell 上的环境变量 Windows
Git environment variables on PowerShell on Windows
以下函数取自 ohmyzsh,出于教育目的,我正在重写它以与 PowerShell 7.2.2 一起使用。
function __git_prompt_git() {
GIT_OPTIONAL_LOCKS=0 command git "$@"
}
显然,PS 不支持像 ($foo='bar' func)
这样的内联变量,并且 ($foo='bar'; func)
在 ;
处抛出错误。另外,我不知道 Git for Windows 是否读取自 $GIT_OPTIONAL_LOCKS
或 $env:GIT_OPTIONAL_LOCKS
.
环境变量不同于您在 Powershell 中使用的普通变量。环境是 env: implicit "PS Drive" 允许您访问的环境,它位于其他几个 drive-like 命名空间旁边,其中一些是实际的驱动器,如 C: 等等。
PS C:\> get-psdrive
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Alias Alias
C 127.73 337.38 FileSystem C:\
Cert Certificate \
D 281.46 2700.96 FileSystem D:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
WSMan WSMan
正如您所怀疑的那样,您确实可以 dir (Get-ChildItem) env: "drive":
PS C:\> dir env:
Name Value
---- -----
ALLUSERSPROFILE C:\ProgramData
APPDATA C:\Users\myname\AppData\Roaming
...
所以是的,$GIT_OPTIONAL_LOCKS 和 $env:GIT_OPTIONAL_LOCKS 确实是完全不同的。第一个只是 运行 powershell 范围内的一个变量,第二个是同名(巧合)的环境变量。
由于环境变量是外部变量,因此您需要保存和恢复,例如:
$t = $env:GIT_OPTIONAL_LOCKS
$env:GIT_OPTIONAL_LOCKS = 0
git "$@"
$env:GIT_OPTIONAL_LOCKS = $t
如果环境变量尚不存在,这样做是正确的; $t 将设置为 $null 并将环境变量设置为 $null 会将其从环境中删除。
以下函数取自 ohmyzsh,出于教育目的,我正在重写它以与 PowerShell 7.2.2 一起使用。
function __git_prompt_git() {
GIT_OPTIONAL_LOCKS=0 command git "$@"
}
显然,PS 不支持像 ($foo='bar' func)
这样的内联变量,并且 ($foo='bar'; func)
在 ;
处抛出错误。另外,我不知道 Git for Windows 是否读取自 $GIT_OPTIONAL_LOCKS
或 $env:GIT_OPTIONAL_LOCKS
.
环境变量不同于您在 Powershell 中使用的普通变量。环境是 env: implicit "PS Drive" 允许您访问的环境,它位于其他几个 drive-like 命名空间旁边,其中一些是实际的驱动器,如 C: 等等。
PS C:\> get-psdrive
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Alias Alias
C 127.73 337.38 FileSystem C:\
Cert Certificate \
D 281.46 2700.96 FileSystem D:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
WSMan WSMan
正如您所怀疑的那样,您确实可以 dir (Get-ChildItem) env: "drive":
PS C:\> dir env:
Name Value
---- -----
ALLUSERSPROFILE C:\ProgramData
APPDATA C:\Users\myname\AppData\Roaming
...
所以是的,$GIT_OPTIONAL_LOCKS 和 $env:GIT_OPTIONAL_LOCKS 确实是完全不同的。第一个只是 运行 powershell 范围内的一个变量,第二个是同名(巧合)的环境变量。
由于环境变量是外部变量,因此您需要保存和恢复,例如:
$t = $env:GIT_OPTIONAL_LOCKS
$env:GIT_OPTIONAL_LOCKS = 0
git "$@"
$env:GIT_OPTIONAL_LOCKS = $t
如果环境变量尚不存在,这样做是正确的; $t 将设置为 $null 并将环境变量设置为 $null 会将其从环境中删除。