powershell - 奇怪的 Powershell "interactive"行为

标签 powershell powershell-5.0

有时,在 Powershell 中使用某些命令时,控制台会设置为某种“交互模式”,这使得它的行为方式对我来说完全无法使用,因此我必须重新启动控制台。我不确定这是 Powershell 中的错误还是我不知道的功能。

这是一种重现它的方法(但是,这远不是它发生的唯一方式):

  • 将你的 Powershell 控制台导航到一个不太新的 Git 存储库,即至少有几十个提交。
  • 输入 git reflog .
  • Git 显示最近 HEAD 的列表位置,大部分时间是最后提交的列表。
  • 按 Ctrl+C 或 q 退出列表并返回到控制台。
  • 或者,按 cls清除控制台屏幕。

  • 现在,控制台处于这种奇怪的模式。当我开始打字时,控制台像往常一样接受一些输入的字符,但有些按键似乎让控制台显示了以前 git reflog 的片段。命令。

    这是一个示例:在一个全新的 powershell 控制台中,我执行了上述步骤。然后我输入了abcdefghijklmn .这就是这个控制台现在的样子:

    enter image description here

    如您所见,字符 j 和 l 被视为一些命令打印了 git reflog 的一部分。输出到控制台窗口,但 下面 提示。

    这是错误还是功能?还有其他人遇到这些问题吗?

    最佳答案

    less (默认 Git 寻呼机)不会将 Ctrl+C 解释为退出命令。您可以打开一个新的控制台窗口,其中 less将是唯一附加到它的应用程序:start git reflog来验证这一点。当您按 Ctrl+C 和 less 时不是附加到当前控制台窗口的唯一应用程序,然后 Ctrl+C 被外壳(PowerShell 或 CMD)接收,外壳会要求用户提供更多输入。可以在任务管理器中看到按Ctrl+C后,less仍在运行,尽管 shell 会为您打印一个新的提示。所以现在你有两个应用程序竞争单个控制台窗口输入缓冲区:一些键将由第一个应用程序接收,而其他键由第二个应用程序接收。您需要多次输入 q 和 Enter 以确保 less将收到它的 q .

    关于powershell - 奇怪的 Powershell "interactive"行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40439693/

    相关文章:

    powershell - 如何使用 ssh 和 PowerShell 中的私钥连接到 linux 服务器?

    azure - 选择-AzureRm订阅 : Please provide a valid tenant or a valid subscription

    powershell - ParameterArgumentTransformationError

    powershell - 如何在不关闭输出窗口的情况下运行 PowerShell Start-Process?

    Powershell 不加载 System.Net.Http 程序集并忽略脚本中的 Add-Type

    Powershell 5 : Cannot convert value To System. 字符串

    Powershell 定义 Powershell 对象

    powershell - 如何在 PowerShell 脚本中创建命名空间

    powershell - 使用 Powershell 在 Windows 上强制执行密码复杂性

    powershell - 在 PowerShell 5 中访问 Outlook 文件夹