Я парень из Linux, но пытаюсь быть непредубежденным и изучать немного Powershell. Мне не хватает возможности cd -
вернуться к предыдущему каталогу, как в * nix shell. Есть ли в Powershell аналогичная команда, которая позволила бы мне вернуться в мой предыдущий каталог?
3 ответа
Не совсем так, как я знаю. Одним из вариантов является использование pushd вместо cd. Тогда popd вернет вас обратно.
Вы также можете изменить свой профиль так, чтобы каждый раз, когда появлялось новое приглашение (в основном, когда вы нажимаете Enter). Было бы получить PWD и сравнить это с предыдущим. Если они разные, поместите это значение в стек. Затем вы бы включили в свой профиль другую функцию, которая называется что-то вроде cdb, которая вытолкнула бы последний элемент из стека и cd в него.
Это звучало как весело , так что я придумал решение. Поместите весь этот код в свой профиль (about_Profiles).
[System.Collections.Stack]$GLOBAL:dirStack = @()
$GLOBAL:oldDir = ''
$GLOBAL:addToStack = $true
function prompt
{
Write-Host "PS $(get-location)>" -NoNewLine -foregroundcolor Magenta
$GLOBAL:nowPath = (Get-Location).Path
if(($nowPath -ne $oldDir) -AND $GLOBAL:addToStack){
$GLOBAL:dirStack.Push($oldDir)
$GLOBAL:oldDir = $nowPath
}
$GLOBAL:AddToStack = $true
return ' '
}
function BackOneDir{
$lastDir = $GLOBAL:dirStack.Pop()
$GLOBAL:addToStack = $false
cd $lastDir
}
Set-Alias bd BackOneDir
Теперь вы можете использовать CD так же, как обычно, и BD вернет вас обратно в историю вашего местоположения.
Быстрое и грязное решение - использовать псевдонимы cd
и bd
для pushd
и popd
. Ограничением является то, что вы не можете делать эквивалент cd -
снова и снова.
Set-Alias -Name cd -Value pushd -Option AllScope
Set-Alias -Name bd -Value popd -Option AllScope
Я изменил отличный скрипт EBGreen, чтобы cd-
всегда брал вас в ваш предыдущий каталог, а не перебирал историю. Таким образом, использование cd-
несколько раз переключит две директории, что и делает cd -
в оболочках unix.
$GLOBAL:previousDir = ''
$GLOBAL:currentDir = ''
function prompt
{
Write-Host "PS $(get-location)>" -NoNewLine -foregroundcolor Green
$GLOBAL:nowPath = (Get-Location).Path
if($nowPath -ne $GLOBAL:currentDir){
$GLOBAL:previousDir = $GLOBAL:currentDir
$GLOBAL:currentDir = $nowPath
}
return ' '
}
function BackOneDir{
cd $GLOBAL:previousDir
}
Set-Alias cd- BackOneDir
Ох, и мне пришлось изменить цвет подсказки на зеленый :)