Powershell中的“more”或“less”命令的等价物?
有没有一种方法来分页输出通过pipe道到一些“更多”的命令,这是在Linux \ UNIX的shell?
那么…有更多或更less(…)与其他平台所期望的相同。 试试下面的例子:
dir -rec | more
就在这里:
some-cmdlet | out-host -paging
dir -rec | more
dir -rec | more
是不好的build议。
这会导致powershell在将其输出到屏幕之前对整个命令进行评估,而对于输出分页
在一些极端情况下,可能会导致系统崩溃(例如, dir 'C:\' | more
)
另一方面,使用out-host -paging
将在屏幕上显示信息。
Powershell社区扩展具有一个名为“less”的方便函数,它使用less.exe的移植副本来实际处理分页,从而提供更完整的Unix样式function集。
您可以通过启动pipe理员shell并运行以下命令来安装它:
Find-Package pscx | Install-Package -Force
( force
升级旧版本)
您可以将string传递给它,或者将文件名作为直接参数。
type foo.txt | less less foo.txt, bar.txt, baz.txt
它在ConEmu和Powershell窗口中工作,但不幸的是,它不能按照你所期望的方式在v2.0 ISE下工作。
more
不用于限制输出,它用于对输出进行分页,并且使得在terminal中读取更容易,如果有的话。
你在说使用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
添加了一个函数定义和别名到我的默认configuration文件
这个函数主要基于Aman Dhally的这个博客条目,并且在分页时按下Q
添加exception处理。
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
dir -r | more
,它会立即启动分页输出,因为PowerShell的pipe道(而不是等待more.com的完整输出)。
如果你安装了VIM,我完全享受dir -r | vim -R -
dir -r | vim -R -
。 不幸的是,这与more
(即没有stream)相同的问题。
我比“more”命令更喜欢“less”命令,因为你也可以后退(而不是仅仅向前)。 我觉得这个function非常有用。
msysgit中的“less”适用于我(对于我来说,path是C:\Program Files (x86)\Git\bin\less.exe
)。 我在PowerShell版本的“less”错误。
例:
ls|less
为了节省input,我在PowerShellconfiguration文件中添加了“l”的别名。
sal l "C:\Program Files (x86)\Git\bin\less.exe"
build议:将文件放入临时/一次性.txt文件,然后让操作系统调用您最喜欢的编辑器,即链接到.txt扩展名的编辑器。
Get-Process | Out-File temp.txt; \ TEMP.TXT
注意:每次使用这个,你都会覆盖任何预先存在的temp.txt文件。 明智地select文件名称。
以上只是一个基本的想法。
下一步将使用别名或configuration文件函数将其转换为“| more”。
HTH,Marcelo Finkielsztein