Скажите, что Вы перешли к PowerShell и добавили путь:
$env:path += 'C:\banal\cranial\inversion'
Ой, Вы забыли a; в нем он должен был быть
$env:path += ';C:\banal\cranial\inversion'
- но Ваш путь уже завинчен. В zsh мы можем просто vared PATH
; что относительно PowerShell, там способ отредактировать переменную вместо того, чтобы сбросить его снова? И при сбросе, как можно скопировать и вставить просто часть его, если это повторяется?
Это не делает, но Вы могли сделать что-то как:
function Edit-Variable {
#.Parameter name
# The name (or path) to the variable to edit.
#.Parameter Environment
# Optional switch to force evaluating the name as an environment variable. You don't need this if you specify the path as env:Path instead of just "Path"
#.Example
# Edit-Variable -env path
#.Example
# Edit-Variable profile
#.Example
# Edit-Variable env:\path
#.Example
# Edit-Variable variable:profile
param(
[Parameter(Position=0,ValueFromPipelineByPropertyName=$true,ValueFromPipeline=$true)]
[string]$name
,
[switch]$Environment
)
process {
$path = Resolve-Path $name -ErrorAction SilentlyContinue
if($Environment) {
## Force Env: if they said -Env
if(!$path -or $Path.Provider.Name -ne "Environment") {
$path = Resolve-Path "Env:$name"
}
} else {
if($Path -and $Path.Provider.Name -eq "Environment") {
$Environment = $true
} elseif(!$path -or $Path.Provider.Name -ne "Variable") {
$path = Resolve-Path "Variable:$name" -ErrorAction SilentlyContinue
}
}
$temp = [IO.Path]::GetTempFileName()
if($path) {
if(!$Environment) {
$value = (Get-Variable $path.ProviderPath).Value
$string = $value -is [String]
if(!$string) {
Write-Warning "Variable $name is not a string variable, editing as CliXml"
Export-Clixml $temp -InputObject $Value
} else {
Set-Content $temp $Value
}
} else {
Get-Content $path | Set-Content $temp
}
} else {
$Environment = $false
New-Variable $Name
$path = Resolve-Path Variable:$name -ErrorAction SilentlyContinue
}
if(!$path) {
Write-Error "Cannot find variable '$name' because it does not exist."
} else {
# Let the user edit it in notepad, and see if they save it
$pre = Get-ChildItem $temp
(Start-Process notepad $temp -passthru).WaitForExit()
$post = Get-ChildItem $temp
if($post.LastWriteTime -gt $pre.LastWriteTime) {
if(!$Environment) {
if(!$string) {
Import-CliXml $temp | Set-Variable $path.ProviderPath
} else {
Get-Content $temp | Set-Variable $path.ProviderPath
}
} else {
Get-Content $temp | Set-Content $path
}
}
}
Remove-Item $temp -ErrorAction SilentlyContinue
}
}
Set-Alias vared Edit-Variable
Я знаю, что это не то, как работы zsh, но блокнот был удобен...
Вы могли использовать строковые методы для выполнения исправления
$indexError = $env:Path.LastIndexOf("C:")
$env:Path = $env:Path.remove($indexError, 1)
$env:Path = $env.Insert($indexError, ";C")
Не забывайте, что в powershell все - объект, и Вы могли использовать любые стратегии программирования для достижения того, в чем Вы нуждаетесь.