@Quttar72
Мы вводим в консоль команду
Write-Host hey1
Мы двигаем курсор вот как показано палочкой:
Write-Host |hey1
Вписываем новую строку
Write-Host foobarhey1
И выполнив эту команду, мы действительно получим вывод строки foobarhey1 (ну в powershell)
А теперь вопрос, правильно ли я понимаю, что при вводе например первого символа f из foobar фактически в powershell вводятся следующая последовательность: \b\b\b\bfhey1 ?
И второй вопрос, он даже чуть важнее: вот эта последовательность в качестве эхо приходит от powershell в нашу консоль, получается нужно хранить реальное положение курсора после записи (которое может отличаться от текущего) и перед каждым выводом эхо возвращать положение курсора в реальное (то есть, чтобы были стерты те символы, которые нужны)?
Решения вопроса 1
@humoured
Почитайте: Console Virtual Terminal Sequences
Ответы на вопрос 1
@MaxKozlov
А теперь вопрос, правильно ли я понимаю, что при вводе например первого символа f из foobar фактически в powershell вводятся следующая последовательность: \b\b\b\bfhey1 ?
Нет, вы неправильно понимаете.
В powershell(а, точнее, в поток) уйдёт чистая строка. все перемещения курсора и тд не имеют никакого отношения к потокам ввода\вывода.
В поток введённые данные отправятся после enter.
Командная строка(терминал) — это куда более сложная сущность, чем просто комбинация потоков ввода и вывода.
а конкретно в powershell это ещё и разбавляется встроенным модулем подсветки синтаксиса PSReadline
P.S.
И, если уж быть полностью корректным, то Write-Host — это именно вывод в хост(терминал), чисто в поток вывода powershell оно не попадает. Для вывода в поток есть Write-Output. А то, что вывел Write-Host, попадает в поток вывода, который вы, например, можете записать в файл, уже из терминала.
Попробуйте в консоли Powershell:
PS D:\> Write-Host 'tohost' > d:\111
tohost
PS D:\> Get-Content d:\111
PS D:\> Write-Output 'tooutput' > d:\111
PS D:\> Get-Content d:\111
tooutput
PS D:\>Разницу замечаете ?
А теперь сравните результат с
Powershell -Noprofile -Command "Write-Host 'tohost'; Write-Output 'tooutput' " > D:\111
Powershell -Noprofile -Command "Get-Content d:\111"hint: полностью вывод попадает в файл только в последнем примере
