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


93

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


잘 모르는 사람들을 위해 몇 가지 멋진 점은 뒤로 이동하고, 화살표를 사용하고, 페이지 위 / 아래를 사용하고, '/'키를 사용하여 검색하고 결과를 강조 표시 할 수 있다는 것입니다.
Constantino Cronemberger

답변:


68

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

dir -rec | more

1
더 수행 정확하게, 당신은 GCM과 기능을 더의 정의를 살펴 걸릴 때 | 선택 정의 | FL
조이

2
실제로 more에 대한 배관은 more.com 구현과는 별 개인 "out-host -paging"에 대한 배관과 동일합니다. 실제로는 눈에 띄는 차이가 없습니다.
Jouni Heikniemi

1
흥미 롭군요! 저에게 gcm more는 두 가지 정의를 반환합니다. 하나는 빈 인수가 주어지면 "$ input | out-host -p"를 수행하는 PowerShell 함수입니다. 이것은 gci -rec | 더. 반면에 gci -rec | more.com, 나는 정상적인 more.com 동작을 얻습니다. PS2가 설치된 W7 RC에서는 "more"를 입력해도 more.com이 표시되는 것 같습니다. PS1이 설치된 Vista에서는 위에서 설명한 동작이 발생합니다. huddledmasses.org/…를 기반으로 한다면 이 함수가 W7에서도 실행되어야한다고 생각하지 않습니까? Hmm ...
Jouni Heikniemi

1
죄송합니다. 특별히 잘 작성되지 않았습니다. 제 요점은 PowerShell 1이있는 Vista에서 "more"로 파이핑하면 Out-Host -p가 호출되고 PowerShell 2가있는 W7에서는 more.com이 호출된다는 것입니다.
Jouni Heikniemi

1
Eep, 나는 정정 당했다. 죄송합니다. 예, 실제로 PS 1에서는 more.com이 아닌 Out-Host -p를 호출합니다 (자신에게 참고 : 매우 유사 해 보이지만 항상 전체 함수를 읽음)
Joey

103

예 :

some-cmdlet | out-host -paging


나는 이전에 점점 더 적게 사용했고, 내가 가능하다고 생각하는 것만 큼 사용자 친화적이지 않았다. 이 변형이 다른 변형보다 더 유용하고 유용하다는 것을 알았습니다. 매우 감사합니다.
TheXenocide 2010-06-17

매우 큰 파일의 내용을 인쇄하는 경우 Get-Content cmdlet이 즉시 내용을 out-host cmdlet으로 파이프하기 시작했기 때문에이 방법이 매우 유용했습니다.
Germán

13
Out-Host의 -Paging 매개 변수는 PowerShell ISE에서 지원되지 않습니다.
Martin Hollingsworth 2011 년

@BrunoBrant 그게 요점이 아닙니다. 출력을 무엇이든 파이프 할 수 있습니다. less텍스트를 받아들이는 큰 텍스트 뷰어 응용 프로그램입니다 stdin. 당신은 임시 파일에 파이프가 할 수 있었던에서 열 nano또는 vim에도 MOAR POWERRRR을 위해! 요점이 아닙니다. PowerShell은 비슷 bash하지만 더 좋습니다. less에 없습니다 bash. 별도의 바이너리입니다. 그래서 당신의 비판은 유효하지 않습니다.
Alan McBee-MSFT

7
또한, 대답에 코멘트 : 별칭을 oh위한 Out-Host명령이 될 수 있도록 충돌이 존재하지 않는 경우는, 및 매개 변수를 생략 할 수있다Some-Cmdlet | oh -p
MSFT - 앨런 McBee

34

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

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

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

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


2
원격 powershell을 사용하고 호출기를 통해 원격 Windows 서버에서 명령을 파이프하려는 경우 파이프를 통해 out-host -paging 원하는대로 작동합니다. more원격 명령을 실행할 때 통과 하는 것은 소용이 없습니다. 전체 텍스트가 한 번에 표시됩니다.
IllvilJa 2013

5
의 별칭은 out-host -paging입니다 oh -pa.
Josh

26

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


5
설치는 몇 가지 기본 Powershell 명령 (gcb, Expand-Archive, Format-Hex, Get-Hash, help, prompt, Get-Clipboard, Get-Help, Set-Clipboard)을 재정의하므로 " force이전 버전을 업그레이드하는 것입니다." 약간 오해의 소지가 있습니다.
TNT

다만 오류 또는 경고없이 현재 사용자에 사용할 설치 :Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
안드레아스 디트리히

멋진 팁에 감사드립니다!
루이 Craveiro

8

"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"


2
나도. 뒤로 페이징 외에도 less를 사용하면 결과에 대한 텍스트 검색을 수행 할 수 있습니다 (슬래시를 입력 한 다음 텍스트를 입력 한 다음 Enter 키를 누른 다음 다음 결과는 'n', 이전 결과는 'p'). 아주 아주 편리합니다.
루이 Craveiro

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
olisteadman

@olisteadman, 이것은 less.exe의 공식 Git 버전입니다. Git for Windows gitforwindows.org 버전 이하를 사용해 보셨습니까 ?
Josh

"외부 호스트"를 사용할 필요가 없습니다. 나는 이것을 사용한다 : "Get-Content tmpf | C : \ cygwin64 \ bin \ less.exe"
Constantino Cronemberger

1
$ env : PAGER = "C : \ cygwin64 \ bin \ less.exe"를 설정하는 것도 매우 좋은 생각입니다. 예를 들어 "help"를 입력 할 때 사용됩니다.
Constantino Cronemberger

4
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

3

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
wisbucky

2

내 기본 프로필에 함수 정의 및 별칭을 추가했습니다. %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으로 전체 출력을 기다리는 것과 반대).


1

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


1
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

오 = 외부 호스트


1

나는 정확히이 질문을 가지고 있었고 (글쎄요 더 적게, 더 많이 원치 않았습니다) @ richard-berg의 대답이 저에게 효과적이라는 것을 알았습니다 .PowerShell을 처음 사용했지만 (Linux는 아닙니다), 그 대답에서 빠진 것들을 발견했습니다 (저를 위해) 내가 먼저 가야 했어요.

Find-Package pscx | Install-Package

그 다음 "Nuget 패키지 설치"를 요청했습니다. 이 작업을 수행했지만에서
-AllowClobber매개 변수 를 사용해야 했습니다 Install-Package.

그런 다음 더 적게 사용하려면 다음

Set-ExecutionPolicy RemoteSigned

을 수행해야했습니다.


사이트에 오신 것을 환영합니다. "답변 # 24"가 무슨 뜻인지 잘 모르겠습니다. 이 숫자는 열거가 아닌 투표 (변경 될 수 있음)입니다.
mhhollomon

아, 알겠습니다 ... 처음으로 스택 오버플로에 게시했습니다! 나는 리처드-빙산 @의 대답을 의미, 나를 위해, 그 허용 대답했을
빌 네 일러

왜 내가 반대표를 받는지 잘 모르겠습니까? (나에게) 무언가가 작동했을 때 확인하는 것이 도움이되는 것 같습니다!
Bill Naylor

0

제안 : 파일을 임시 / 일회용 .txt 파일에 넣은 다음 OS가 .txt 확장자에 연결된 편집기를 호출하도록합니다.

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

참고 : 이것을 사용할 때마다 기존 temp.txt 파일을 덮어 씁니다. 파일 이름을 현명하게 선택하십시오.

위의 내용은 기본적인 아이디어입니다.
다음 단계는 별칭이나 프로필 기능 등을 사용하여 이것을 "| more"로 변환하는 것입니다.

HTH, Marcelo Finkielsztein

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.