2016-11-05 11 views
2

Powershellで特定のコマンドを使用すると、コンソールが何らかの "対話モード"に設定されてしまい、完全に使用できないようになります。コンソール。 Powershellのバグかどうか分からない。ここで Strange Powershell "interactive"の動作

が(ただし、これは遠くないことによってそれが起こる唯一の方法である)、それを再現する方法です:、あまりにも新しいものではないGitのリポジトリへのごPowerShellコンソールをナビゲート

  • すなわち、少なくとも数ダースのコミット。
  • git reflogと入力します。
  • Gitは最近のHEADポジションのリストを表示します。ほとんどの場合、最後のコミットのリストです。
  • Ctrl + Cまたはqを押してリストを終了し、コンソールに戻ります。
  • オプションで、clsを押してコンソール画面を消去します。

コンソールはこの奇妙なモードです。入力を開始すると、コンソールはタイプされた文字のいくつかを通常どおり受け入れますが、一部のキーを押すと、コンソールに前のgit reflogコマンドの断片が表示されるように見えます。

ここでは例を示します。新しいPowerShellコンソールでは、上記の手順を実行しました。それからabcdefghijklmnと入力しました。あなたが見ることができるように、文字Jリットルがコンソールウィンドウにgit reflog出力の一部を印刷し、いくつかのコマンドのように扱われた

enter image description here

が、これはこのコンソールが今探しているものです以下プロンプトが表示されます。

これはバグですか?または機能ですか?これらの問題を抱えている人は誰ですか?

+0

これは実際にブラケットが開いているときに発生します。おそらくそれを試して、動作しません。[Shift + Enter] – saftargholi

+0

@saftargholi ')'、 ']'、 '}'ではありません。 – cheeesus

+0

私は本当にそれについてごめんなさい。 – saftargholi

答えて

1

less(デフォルトのGitページャ)は、終了コマンドとしてCtrl + Cを終了コマンドと解釈しません。 lessが接続されている唯一のアプリケーションである新しいコンソールウィンドウを開くことができます:start git reflogこれを確認します。 Ctrl + Clessが現在のコンソールウィンドウに接続されている唯一のアプリケーションではない場合は、Ctrl + Cがシェル(PowerShellまたはCMD)によって受信され、シェルはユーザーに入力を求めます。 Ctrl + Cを押すと、lessがまだ実行中ですが、シェルが新しいプロンプトを表示しても、タスクマネージャーに表示されます。だから、あなたは1つのコンソールウインドウ入力バッファーのために競合する2つのアプリケーションを持っています:いくつかのキーは、最初のアプリケーションで受信され、他のキーは2番目のアプリケーションによって受信されます。入力する必要がありますqを複数回入力してlessqを受け取ることを確認してください。

+0

ありがとうございます。私がCtrl + Cを押したときPowershellが 'less'をやめない理由を知っていますか? – cheeesus

+0

@cheeesusシェルが殺されるのではなく、アプリケーションが終了すると思われます。例えば、CMDはCtrl + Cでも 'less'を殺しません。 – PetSerAl

+0

@cheeesusまた、複数のシェルを再帰的に実行してCtrl + Cを押すと、すべてのシェルにプロンプ​​トが表示されるわけではありません。したがって、最後のシェルはCtrl + C要求を処理して取り消しますが、明らかに「less」は同じことを行わず、この混乱を引き起こします。 – PetSerAl