Есть ли способ разбить вывод на страницы, связав его с какой-либо командой 'more', которая доступна в оболочках linux \ unix?
Есть ли способ разбить вывод на страницы, связав его с какой-либо командой 'more', которая доступна в оболочках linux \ unix?
Ответы:
Что ж ... Есть "больше", что более или менее (...) то же самое, что вы ожидаете от других платформ. Попробуйте следующий пример:
dir -rec | more
Да, есть:
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
IS oh -pa
.
Расширения Powershell Community Extensions имеют удобную функцию под названием «less», которая предоставляет более полный набор функций в стиле Unix, используя перенесенную копию less.exe для фактической обработки разбиения на страницы.
Вы можете установить его, запустив административную оболочку и запустив:
Find-Package pscx | Install-Package -Force
( 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
more
не используется для ограничения вывода, он используется для разбивки вывода на страницы и облегчения чтения в терминале, если что-то.
Вы говорите об использовании head
и tail
? В EggHeadCafe есть пример:
type my.txt | select-object -first 10
type my.txt | select-object -last 10
подражать 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).
cat C:\Temp\test.txt
cat - это псевдоним для Get-Content - с файлами большего размера вы получите вывод - More - в нижней части терминала.
Вы также можете добавить -wait
cat C:\Temp\test.txt -wait
-wait похож на использование tail, но на самом деле он повторно запускает команду, просто обновляя вывод
cat C:\Temp\test.txt | oh –Paging
oh = Out-Host
У меня был именно этот вопрос (ну, я хотел меньше, а не больше), и я обнаружил, что ответ @ richard-berg сработал для меня, будучи новичком в PowerShell (но не в Linux), я нашел то, чего не хватает в этом ответе (для меня) были: Сначала мне нужно было пойти:
Find-Package pscx | Install-Package
после чего было предложено «установить пакет nuget». Я сделал это, но потом пришлось использовать -AllowClobber
параметр on Install-Package
.
затем, чтобы использовать меньше, мне пришлось: и
Set-ExecutionPolicy RemoteSigned
все сработало :-)
Предложение: Поместите файл во временный / одноразовый файл .txt, а затем позвольте ОС вызвать ваш любимый редактор, связанный с расширением .txt.
Get-Process | Out-File temp.txt; . \ temp.txt
Примечание: каждый раз, когда вы используете это, вы будете перезаписывать любой ранее существовавший файл temp.txt. Подбирайте имя файла с умом.
Вышесказанное - это всего лишь основная идея.
Следующим шагом будет преобразование этого в «| больше» с использованием псевдонимов или функций профиля и т. Д.
HTH, Марсело Финкельштейн