Как я могу сбросить Windows PowerShell/командную строку, как сброс в bash?

Вопрос или проблема

Когда я использую vagrant на Windows, я иногда обнаруживаю, что новые строки не обрабатываются должным образом. Это обычно происходит после выполнения vagrant ssh. В результате текст выглядит следующим образом:

This machine with the name 'default' was not found 
                                                   configured for this environment.

В bash, когда происходит такая ошибка терминала, я могу выполнить команду reset, и это очищает и сбрасывает настройки терминала. Как я могу сделать что-то похожее в Powershell/CMD, чтобы не приходилось закрывать окно и начинать новый сеанс powershell/cmd?

Хотя это не замена команде Linux reset, этот скрипт PowerShell обновит ширину буфера окна вашего PowerShell в соответствии с шириной окна, что может исправить упомянутые вами проблемы с выравниванием.

Я использую этот скрипт, чтобы убрать горизонтальную полосу прокрутки, которая появляется, когда я уменьшаю окно по горизонтали.

function reset {
    Set-Buffer-Width-To-Screen-Width
    Clear-Host
}

function Set-Buffer-Width-To-Screen-Width {
    $h = Get-Host
    $ui = $h.UI.RawUI
    $bufferSize = $ui.BufferSize
    $windowSize = $ui.WindowSize
    $bufferSize.Width = $windowSize.Width
    $ui.BufferSize = $bufferSize
}

Используйте CLS как в командной строке, так и в PowerShell.

Примечание: В PowerShell CLS технически является псевдонимом команды Clear-Host.

CLS Очистить экран – Windows CMD – SS64

Синтаксис: CLS

Если CLS направлен в файл, на консоль или выполняется через FOR /F, он выведет символ перевода строки (ASCII 10).

Ошибки:
Если экран успешно очищен, %ERRORLEVEL% =
не изменяется (это ошибка). Если задан неверный переключатель = 1

 

Clear-Host – PowerShell – SS64 Clear-Host

Очистить экран.

Синтаксис: Clear-Host

Стандартные псевдонимы для Clear-Host: clear, cls

Насколько я могу судить, нет встроенной команды Windows, эквивалентной “reset” в Linux.

Однако, можно легко создать свою собственную. Вам просто нужно выдать последовательность “(ESC)c” в терминал. Это можно сделать из bat-файла.

Используя редактор, который поддерживает управляющие символы, такие как этот (я использовал Notepad++, похоже, ни Windows Notepad, ни VSCode не могут использоваться при моем быстром проверке), создайте bat-файл с строкой:

echo (ESC)c

(Это специальный символ “ESC”, вводимый с помощью ALT+027, а не буквально “(ESC)”).

Выполнение указанного bat-файла “полностью” сбросит терминал. (По крайней мере, такие вещи как перенос строк, видимость курсора, цвета…)

Ответ или решение

Сброс терминала в операционных системах позволяет восстановить его исходные настройки, когда в процессе работы с ним происходят различные коллизии, такие как проблемы с разметкой текста или некорректные переходы на новую строку. В частности, при работе с vagrant на Windows такие проблемы могут возникать после команд типа vagrant ssh. В мире Linux задача решается простой командой reset. Однако, Windows не поддерживает аналогичное решение по умолчанию для PowerShell и CMD. Тем не менее, существует несколько подходов, к которым стоит прибегнуть для достижения схожих результатов.

Теория

Команда reset в Linux эффективно очищает экран и восстанавливает исходные параметры терминала, такие как настройки цвета, разметку, а также убирает нежелательные изменения в состоянии терминала. Это очень удобно при сбоях в визуализации, вызванных, например, удалёнными сессиями подключения.

В Windows PowerShell и Command Prompt аналогичного инструмента не предусмотрено. Вместо этого можно использовать комбинацию команд и скриптов для частичного достижения того же эффекта. Это особенно важно для пользователей, активно работающих в средах с неоднородными настройками, например, при запуске виртуальных машин или удалённых сеансов.

Пример

Один из способов частично сбросить настройки терминала в Windows PowerShell — это использование скрипта, который адаптирует размер буфера к текущим размерам окна. Рассмотрим следующий скрипт:

function reset {
    Set-Buffer-Width-To-Screen-Width
    Clear-Host
}

function Set-Buffer-Width-To-Screen-Width {
    $h = Get-Host
    $ui = $h.UI.RawUI
    $bufferSize = $ui.BufferSize
    $windowSize = $ui.WindowSize
    $bufferSize.Width = $windowSize.Width
    $ui.BufferSize = $bufferSize
}

С помощью этого скрипта можно устранить проблемы с «ломаной» разметкой текста и избавиться от горизонтального ползунка. Также можно использовать команду CLS для очистки экрана, которая является эквивалентом команды Clear-Host в PowerShell.

Применение

  1. Создание и использование скрипта:

    • В PowerShell можно создать функцию reset, как показано в примере выше. Она выполнит две операции: установка ширины буфера, чтобы она соответствовала текущему окну, и очистка экрана командой Clear-Host.
    • После создания функции, её можно вызывать просто введя reset в терминал.
  2. Альтернативный подход с batch файлом:

    • Можно использовать batch файл, чтобы передать терминалу ESC-последовательность, «перезагружающую» его настройки. Это можно сделать через текстовый редактор, поддерживающий контрольные символы, например, Notepad++.
    • Создайте файл со строкой echo (ESC)c, где (ESC) замените на соответствующий символ, используя ALT+027. Запуск такого файла выполнит программный сброс терминала.

Заключение

Хотя в Windows нет прямого аналога команды reset, пользователи PowerShell или CMD могут вручную настроить свои сессии терминала для устранения нестандартного поведения. Использование указанных методов поможет быстро решить большинство проблем, связанных с нарушением разметки и стабильной работы терминала. При этом речь идёт скорее о настройке и улучшении работы уже действующего инструмента, чем о полном его сбросе, как в случае с reset в Linux.

Учитывая разнообразие задач в IT, крайне важно понимать, как можно гибко управлять доступными инструментами вашего рабочего окружения для обеспечения максимальной эффективности работы.

Оцените материал
Добавить комментарий

Капча загружается...