programing tip

Powershell의 'more'또는 'less'명령과 동일합니까?

itbloger 2020. 10. 9. 09:01
반응형

Powershell의 'more'또는 'less'명령과 동일합니까?


출력을 linux \ unix 셸에서 사용할 수있는 'more'명령으로 파이프하여 페이지를 매기는 방법이 있습니까?


글쎄요 ... 다른 플랫폼에서 기대할 수있는 것과 거의 같은 (...) "more"가 있습니다. 다음 예를 시도하십시오.

dir -rec | more

예 :

some-cmdlet | out-host -paging


dir -rec | more 나쁜 조언입니다.

화면에 출력하기 전에 powershell이 ​​전체 ​​명령을 평가하도록합니다. 출력 페이지 매김과 같은 작업에는 필요하지 않습니다.

일부 극단적 인 경우에 따라서는 충돌 (예를 시스템을 일으킬 수 dir 'C:\' | more)

반면에를 사용 out-host -paging하면 사용 가능한 정보가 화면에 출력됩니다.


파워 쉘 커뮤니티 확장 실제로 페이징을 처리하기 위해 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에서 예상하는 방식으로 작동하지 않습니다.


"more"명령보다 "less"명령을 선호합니다. less 명령을 사용하면 결과를 앞으로가 아니라 뒤로 페이지 할 수도 있습니다.

Windows 용 Git 의 "less"가 저에게 효과적입니다 (내 경로는 C:\Program Files (x86)\Git\usr\less.exe. Powershell에서 Gow 버전 "less" 오류가 발생했습니다 .

예:

ls|less

입력을 저장하기 위해 Powershell 프로필에 less라는 별칭 "l"을 추가했습니다.

sal l "C:\Program Files (x86)\Git\bin\less.exe"


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

이 기능은 주로 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으로 전체 출력을 기다리는 것과 반대).


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

VIM이 설치되어 있다면 dir -r | vim -R -. 불행히도 이것은 동일한 문제를 안고 있습니다 more(즉, 스트리밍 없음).


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

오 = 외부 호스트


Suggestion: Put the file into a temporary/disposable .txt file, then let the OS invoke your favorite editor, the one that is linked to the .txt extension.

Get-Process | Out-File temp.txt ; .\temp.txt

Note: each time you use this you will overwrite any pre-existent temp.txt file. Pick the file name wisely.

The above is just a basic idea.
Next step would be transforming this into "| more" using aliases or profile functions, etc.

HTH, Marcelo Finkielsztein


I had exactly this question (well I wanted less, not more) and found the answer of @richard-berg worked for me, being new to PowerShell (but not to Linux), I found the things missing from that answer (for me) were: I first needed to go:

Find-Package pscx | Install-Package

which then prompted for "installing nuget package". I did this but then had to use the
-AllowClobber parameter on Install-Package.

then in order to use less, I had to:

Set-ExecutionPolicy RemoteSigned

which all worked :-)

참고URL : https://stackoverflow.com/questions/1078920/equivalent-of-more-or-less-command-in-powershell

반응형