我希望每当Powershell进入一个新目录时自动运行一个命令(我的关键是检查我是否在Python virtualenv并且如果我正在激活它,但我可以想象其他用途 - 我正在尝试移植https://github.com/kennethreitz/autoenv到Powershell。)
我该怎么做?到目前为止,我已经想到了几个选项,但它们并不理想:
Set-Location
cmdlet。我认为这就是PSCX所做的,但它只会影响cd
别名。所以它可能是不完整的(还有Push-Location
,以及任何其他用户定义的东西)。此外,它不适用于Powershell启动的目录(由快捷方式设置,而不是Set-Location
命令)。我错过了更好的选择吗?或者有没有人对如何有效地实现这一点有任何建议?
答案 0 :(得分:0)
我会这样做:覆盖cd别名 一个糟糕的例子可能是
function set-env{
param(
[Parameter(Position=0, Mandatory=$true,ValueFromPipeline = $true)] $path
)
set-location $path
# stupid test
if ($path -match "temp"){
echo "warning this is a temporary dir"
}
}
Remove-Item -path alias:cd -ea silentlycontinue
new-item -Path alias:cd -Value set-env |out-null
cd c:\temp\
答案 1 :(得分:0)
我所知道的最佳解决方案是修改提示功能。这就是posh-git的工作原理,虽然它对于posh-git是有意义的,因为当你改变回购时它们实际上会改变提示。
您可以尝试为Set-Location和Push-Location创建代理函数,但那些通常无法工作,因为任何函数都可以通过调用API而不是使用这些命令来更改目录,类似于PSCX的工作方式(使用cmdlet Set-LocationEx。)