powershell - 是否可以异步更新 PowerShell 提示符?

标签 powershell

我喜欢在我的 PowerShell 提示符中包含 Mercurial/Git 存储库状态。有时这会减慢 prompt()功能相当大,导致长时间等待,直到您可以开始在 shell 中输入。我想知道,是否可以更新提示异步?

理想情况下,它会:

  • Write-Host当前目录(典型提示)
  • 开始在后台收集 repo 状态。
  • 收集 repo 状态时,假设 prompt还没有被再次调用,将 repo 状态插入到提示符中。

  • 有没有人这样做过?

    最佳答案

    不是本身。

    您不能异步更新提示,因为提示只返回文本,并且只要完成顶级命令,就会在主机中调用它。

    您可以重写提示来执行诸如检查数据源或异步更新的变量之类的操作。因此,在命令运行时提示不会不断变化,但它不会挂起一段时间,因为它只是在查找数据。

    更棘手的是,它进入了试图在事后偷看执行结果的游戏。 PowerShell 不会保留它们,除非它们被分配给某些东西。因此,要正确执行此操作,必须覆盖 Out-Default(仅适用于 ISE、PowerGUI 等,而不适用于 powershell.exe)。覆盖它并不难,但它需要了解很多 PowerShell 巫术,即使按照我令人印象深刻的标准。

    从好的方面来说,我显然一直在思考这个问题,并且有一个模块可以做很多这样的事情,我只是在确定我要如何处理它以及它是否保留在自己的模块中或加入我们构建的其他模块之一。

    我会在外出时更新它,但这个路线图应该会有很大帮助。

    简短的回答是您无法更新提示异步,但您可以让它变得更快,并且这样做所需的技巧打开了许多更酷的门。

    希望这可以帮助

    关于powershell - 是否可以异步更新 PowerShell 提示符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10839873/

    相关文章:

    powershell - 在 Powershell 中,将字符串转换为 int 的惯用方法是什么?

    powershell - 在 Powershell 中调用 Exchange 命令 - 数据部分中不允许出现 block

    powershell - 如何使用批处理文件删除子字符串

    http - 如何在 PowerShell 中使用 HTTP GET?

    powershell - 在Powershell中,[string []]是什么类型的数据类型,何时使用?

    windows - 使用 Register-WmiEvent 使用 PowerShhell 4.0 捕获 Windows 8.1 系统事件/触发器?

    PowerShell 远程处理工作组计算机

    powershell - 在 PowerShell 脚本中创建/销毁新环境

    powershell - 从远程脚本 block 调用函数

    powershell - 将文件复制到远程服务器,在Powershell中加入本地和远程服务器复制文件的路径时出现问题