奇怪的Powershell“互动”行为

时间:2016-11-05 15:02:57

标签: powershell powershell-v5.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输出的部分打印到控制台窗口,但低于提示。

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

1 个答案:

答案 0 :(得分:2)

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