출력을 linux \ unix 셸에서 사용할 수있는 'more'명령으로 파이프하여 페이지를 매기는 방법이 있습니까?
출력을 linux \ unix 셸에서 사용할 수있는 'more'명령으로 파이프하여 페이지를 매기는 방법이 있습니까?
답변:
글쎄요 ... 다른 플랫폼에서 기대할 수있는 것과 거의 같은 "more"가 있습니다. 다음 예를 시도하십시오.
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입니다 oh -pa.
파워 쉘 커뮤니티 확장 실제로 페이징을 처리하기 위해 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
"more"명령보다 "less"명령을 선호합니다. less 명령을 사용하면 결과를 앞으로가 아니라 뒤로 페이지 할 수도 있습니다.
Windows 용 Git 의 "less"가 나를 위해 작동합니다 (내 경로는 C:\Program Files (x86)\Git\usr\less.exe. Powershell 에서 "less" 의 Gow 버전으로 오류가 발생했습니다 .
예:
ls|less
입력을 저장하기 위해 Powershell 프로필에 less라는 별칭 "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.
head있으며 tail이제 powershell에서 수행 할 수 있습니다. stackoverflow.com/a/41626586/1081043
내 기본 프로필에 함수 정의 및 별칭을 추가했습니다.
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
이 기능은 주로 Aman Dhally의이 블로그 항목을 기반으로 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으로 전체 출력을 기다리는 것과 반대).
나는 정확히이 질문을 가지고 있었고 (글쎄요 더 적게, 더 많이 원치 않았습니다) @ richard-berg의 대답이 저에게 효과적이라는 것을 알았습니다 .PowerShell을 처음 사용했지만 (Linux는 아닙니다), 그 대답에서 빠진 것들을 발견했습니다 (저를 위해) 내가 먼저 가야 했어요.
Find-Package pscx | Install-Package
그 다음 "Nuget 패키지 설치"를 요청했습니다. 이 작업을 수행했지만에서 -AllowClobber매개 변수 를 사용해야 했습니다 Install-Package.
그런 다음 더 적게 사용하려면 다음
Set-ExecutionPolicy RemoteSigned
을 수행해야했습니다.