Есть ли способ разбить вывод на страницы, связав его с какой-либо командой 'more', которая доступна в оболочках linux \ unix?
powershell
Валентин Васильев
источник
источник
Ответы:
Что ж ... Есть "больше", что более или менее (...) то же самое, что вы ожидаете от других платформ. Попробуйте следующий пример:
источник
Да, есть:
some-cmdlet | out-host -paging
источник
less
это просто большое приложениеstdin
для просмотра текста, которое принимает текст. Вы могли бы труба это временный файл и открыть его вnano
илиvim
для четного Moar POWERRRR! Не в этом суть. PowerShell похожbash
(но лучше, имхо).less
не входитbash
; это отдельный двоичный файл. Значит, ваша критика не обоснована.oh
дляOut-Host
, а параметры могут быть сокращены, если нет конфликта, поэтому команда может бытьSome-Cmdlet | oh -p
dir -rec | more
плохой совет.Это заставит PowerShell оценить всю команду перед выводом ее на экран, что не требуется для чего-то вроде разбивки на страницы
В некоторых крайних случаях это может привести к сбою системы (например
dir 'C:\' | more
)С другой стороны, использование
out-host -paging
будет выводить информацию на экран по мере ее доступности.источник
out-host -paging
работает должным образом. Передача по конвейеруmore
при запуске удаленной команды бесполезна: отображается сразу весь текст.out-host -paging
ISoh -pa
.Расширения Powershell Community Extensions имеют удобную функцию под названием «less», которая предоставляет более полный набор функций в стиле Unix, используя перенесенную копию less.exe для фактической обработки разбиения на страницы.
Вы можете установить его, запустив административную оболочку и запустив:
(
force
обновление старых версий)Вы можете передать ему строки или указать имена файлов как прямые параметры.
type foo.txt | less less foo.txt, bar.txt, baz.txt
Он работает в окнах ConEmu и Powershell, но, к сожалению, не работает так, как вы ожидали бы от версии 2.0 ISE.
источник
force
это обновить старые версии» кажется немного вводит в заблуждение.Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
Я предпочитаю команду «меньше» команде «больше». С помощью команды less результаты также можно перемещать в обратном направлении, а не только вперед.
У меня работает «меньше» из Git для Windows (мой путь: у
C:\Program Files (x86)\Git\usr\less.exe
меня были ошибки в Powershell с версией Gow «меньше».Пример:
ls|less
Чтобы не печатать, я добавил в свой профиль Powershell псевдоним «l» для уменьшения:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
источник
less
фанат здесь. Но я получаю эту ошибку. Любой совет? ________________________________________PS C:\Users\oli> Get-Content tmpf | out-host 'C:\Program Files\Git\usr\bin\less.exe' Out-Host : A positional parameter cannot be found that accepts argument 'C:\Program Files\Git\usr\bin\less.exe'. At line:1 char:20 + Get-Content tmpf | out-host 'C:\Program Files\Git\usr\bin\less.exe' + CategoryInfo : InvalidArgument: (:) [Out-Host], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.OutHostCommand
PS> cd C:\ PS> dir -r -ex 0 | out-Host -paging PS> dir -file -r -ea 0 c:\Windows | Select FullName,Length,LastWriteTime | out-gridview
источник
more
не используется для ограничения вывода, он используется для разбивки вывода на страницы и облегчения чтения в терминале, если что-то.Вы говорите об использовании
head
иtail
? В EggHeadCafe есть пример:type my.txt | select-object -first 10 type my.txt | select-object -last 10
подражать
head
иtail
.источник
head
tail
Я добавил определение функции и псевдоним в свой профиль по умолчанию на
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
Эта функция в основном основана на этой записи в блоге Амана Дхалли с добавленной обработкой исключений для нажатия
Q
во время перелистывания страниц.function more2 { param( [Parameter(ValueFromPipeline=$true)] [System.Management.Automation.PSObject]$InputObject ) begin { $type = [System.Management.Automation.CommandTypes]::Cmdlet $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand(‘Out-Host’, $type) $scriptCmd = {& $wrappedCmd @PSBoundParameters -Paging } $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin) $steppablePipeline.Begin($PSCmdlet) } process { try { $steppablePipeline.Process($_) } catch { break; } } end { $steppablePipeline.End() } #.ForwardHelpTargetName Out-Host #.ForwardHelpCategory Cmdlet } New-Alias more more2
так что я могу просто назвать это как,
dir -r | more
и он немедленно запускает постраничный вывод из-за конвейера PowerShell (в отличие от ожидания полного вывода с помощью more.com).источник
Если у вас установлен VIM, мне очень нравится
dir -r | vim -R -
. К сожалению, у этого есть та же проблемаmore
(т. Е. Нет потоковой передачи).источник
cat - это псевдоним для Get-Content - с файлами большего размера вы получите вывод - More - в нижней части терминала.
Вы также можете добавить -wait
cat C:\Temp\test.txt -wait
-wait похож на использование tail, но на самом деле он повторно запускает команду, просто обновляя вывод
oh = Out-Host
источник
У меня был именно этот вопрос (ну, я хотел меньше, а не больше), и я обнаружил, что ответ @ richard-berg сработал для меня, будучи новичком в PowerShell (но не в Linux), я нашел то, чего не хватает в этом ответе (для меня) были: Сначала мне нужно было пойти:
Find-Package pscx | Install-Package
после чего было предложено «установить пакет nuget». Я сделал это, но потом пришлось использовать
-AllowClobber
параметр onInstall-Package
.затем, чтобы использовать меньше, мне пришлось: и
Set-ExecutionPolicy RemoteSigned
все сработало :-)
источник
Предложение: Поместите файл во временный / одноразовый файл .txt, а затем позвольте ОС вызвать ваш любимый редактор, связанный с расширением .txt.
Get-Process | Out-File temp.txt; . \ temp.txt
Примечание: каждый раз, когда вы используете это, вы будете перезаписывать любой ранее существовавший файл temp.txt. Подбирайте имя файла с умом.
Вышесказанное - это всего лишь основная идея.
Следующим шагом будет преобразование этого в «| больше» с использованием псевдонимов или функций профиля и т. Д.
HTH, Марсело Финкельштейн
источник