2016-11-05 7 views
2

Иногда при использовании определенных команд внутри Powershell консоль устанавливается в какой-то «интерактивный режим», что заставляет его вести себя так, что это совершенно непригодно для меня, поэтому мне нужно перезапустить консоль. Я не уверен, что это ошибка в Powershell или функция, о которой я не знаю.«интерактивное» поведение Strange Powershell

Вот способ, чтобы воспроизвести его (однако, это далеко не единственный способ, которым это происходит):

  • прокладывает свой Powershell консоль в хранилище Git, который не является слишком новым, т.е. имеет, по крайней мере, несколько десятков коммитов.
  • git reflog.
  • Git показывает список последних HEAD позиций, которые в большинстве случаев являются списком последних коммитов.
  • Нажмите Ctrl + C или q, чтобы выйти из списка и вернуться на консоль.
  • При необходимости нажмите cls, чтобы очистить экран консоли.

Теперь консоль находится в этом странном режиме. Когда я начинаю вводить текст, консоль принимает некоторые типизированные символы, как обычно, но некоторые нажатия клавиш, по-видимому, позволяют отображать фрагменты консоли предыдущей команды git reflog.

Вот пример: на новой консоли PowerShell я выполнил описанные выше шаги. Затем я вошел abcdefghijklmn. Это то, что эта консоль теперь глядя:

enter image description here

Как вы можете видеть, символы J и л лечились как некоторые команды, напечатанных части git reflog вывода в окне консоли, но ниже подсказка.

Это ошибка или функция? У кого-нибудь еще есть эти проблемы?

+0

на самом деле это происходит, когда ваши скобки открыты. попробуйте закрыть скобку, возможно, ее исправить, или вы используете [Shift + enter] – saftargholi

+0

@saftargholi Просто попробовал это, не работает. Не с ')', ']', ни '}'. – cheeesus

+0

Я действительно не знаю, извините. – saftargholi

ответ

1

less (по умолчанию Git пейджер) не интерпретирует Ctrl + C как команда выхода. Вы можете открыть новое окно консоли, где less будет единственным приложением к нему: start git reflog, чтобы убедиться в этом. Когда вы нажимаете Ctrl + C и less - это не единственное приложение, прикрепленное к текущему окну консоли, тогда Ctrl + C получает оболочку (PowerShell или CMD), а оболочка запрашивает у пользователя больше ввода. В диспетчере задач вы можете видеть, что после нажатия Ctrl + C, less все еще работает, хотя оболочка печатает для вас новое приглашение. Итак, теперь у вас есть два приложения, которые конкурируют за входной буфер для одного консольного окна: некоторые ключи будут получены первым приложением, а другие - вторым приложением. Вам необходимо ввести q и Введите несколько раз, чтобы убедиться, что less получит его q.

+0

Спасибо. Знаете ли вы, почему Powershell не перестает «меньше», когда я нажимаю Ctrl + C? – cheeesus

+0

@cheeesus Я думаю, предполагается, что приложение будет закрыто, а не убито оболочкой. Например, CMD также не убивает 'less' в Ctrl + C. – PetSerAl

+0

@cheeesus Также обратите внимание, когда вы запускаете несколько оболочек рекурсивно и нажимаете Ctrl + C, это не означает, что все оболочки отображают свои подсказки. Итак, последняя оболочка обрабатывает и отменяет запрос Ctrl + C, но, судя по всему, 'less' не делает то же самое и вызывает эту путаницу. – PetSerAl