Чи є спосіб розподілити сторінку на вихід, передавши його до якоїсь команди 'more', яка доступна в оболонках linux \ unix?
Чи є спосіб розподілити сторінку на вихід, передавши його до якоїсь команди 'more', яка доступна в оболонках linux \ unix?
Відповіді:
Ну ... Є "більше", що більш-менш (...) те саме, що ви очікували б від інших платформ. Спробуйте такий приклад:
dir -rec | more
Так є:
some-cmdlet | out-host -paging
less
- це просто велика програма для перегляду тексту, яка приймає stdin
текст. Ви можете перенести його у тимчасовий файл та відкрити у nano
або vim
навіть для EVEN 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 має зручну функцію з ім'ям «менше» , що забезпечує більш повний набір функцій Unix-стиль, використовуючи портированию копію less.exe насправді обробляти підкачки.
Ви можете встановити його, запустивши адміністративну оболонку та запустивши:
Find-Package pscx | Install-Package -Force
( force
це оновити старіші версії)
Ви можете конвеювати до нього рядки або вказувати імена файлів як прямі параметри.
type foo.txt | less
less foo.txt, bar.txt, baz.txt
Він працює у вікнах ConEmu та Powershell, але, на жаль, він працює не так, як ви очікували б у v2.0 ISE.
force
це оновити старіші версії", здається трохи оманливий.
Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
Я віддаю перевагу команді "менше" перед командою "більше". За допомогою команди менше, результати також можна переміщати назад, а не просто вперед.
Мені працює "менше" від Git для Windows (мій шлях такий C:\Program Files (x86)\Git\usr\less.exe
. У мене були помилки в Powershell з версією Gow "менше".
Приклад:
ls|less
Щоб заощадити введення тексту, я додав псевдонім "l" за менший розмір у своєму профілі Powershell:
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
.
head
і в tail
даний час в PowerShell: stackoverflow.com/a/41626586/1081043
Я додав визначення функції та псевдонім до свого профілю за замовчуванням на
%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 - із більшими файлами ви отримаєте - Більше - вихід у нижній частині терміналу
Ви також можете додати -чекайте
cat C:\Temp\test.txt -wait
-wait - це як використання хвоста, але насправді це повторне виконання команди, лише оновлення результату
cat C:\Temp\test.txt | oh –Paging
oh = Зовнішній господар
У мене було саме це запитання (ну, я хотів менше, не більше) і знайшов відповідь @ richard-berg, який працював на мене, будучи новим у PowerShell (але не в Linux), я знайшов речі, відсутні в цій відповіді (для мене) були: мені спочатку потрібно було піти:
Find-Package pscx | Install-Package
що потім запропонувало "встановити пакет nuget". Я зробив це, але потім довелося використовувати -AllowClobber
параметр on Install-Package
.
то для того, щоб використовувати менше, мені довелося:
Set-ExecutionPolicy RemoteSigned
що все працювало :-)
Пропозиція: Помістіть файл у тимчасовий / одноразовий файл .txt, а потім дозвольте ОС викликати ваш улюблений редактор, той, який пов’язаний із розширенням .txt.
Get-Process | Внефайл temp.txt; . \ temp.txt
Примітка: кожного разу, коли ви використовуєте це, ви будете перезаписувати будь-який існуючий файл temp.txt. З розумом підберіть назву файлу.
Вищевказане - лише основна ідея.
Наступним кроком буде перетворення цього у "| більше" за допомогою псевдонімів або функцій профілю тощо.
HTH, Марсело Фінкільштейн