有没有一种方法可以通过将输出传递给某些'more'命令(在linux \ unix shell中可用)来对输出进行分页?
有没有一种方法可以通过将输出传递给某些'more'命令(在linux \ unix shell中可用)来对输出进行分页?
Answers:
好吧……这里有“更多”,它与您从其他平台获得的期望差不多。请尝试以下示例:
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
。
在PowerShell的社区扩展有一个名为“少”一个方便的功能,它提供了更完整的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
与“更多”命令相比,我更喜欢“较少”命令。使用less命令,结果也可以向后翻页,而不仅仅是向前翻页。
Git for Windows中的“ less” 对我有用(我的路径是C:\Program Files (x86)\Git\usr\less.exe
。使用Gow版本的“ less” 在Powershell中出现错误。
例:
ls|less
为了节省类型,我在Powershell配置文件中添加了别名“ 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
。
我在默认配置文件中添加了功能定义和别名
%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
全部起作用:-)
建议:将文件放入一个临时/一次性.txt文件中,然后让操作系统调用您喜欢的编辑器,该编辑器链接到.txt扩展名。
获取流程| 输出文件temp.txt; 。\ temp.txt
注意:每次使用此功能时,都将覆盖任何先前存在的temp.txt文件。明智地选择文件名。
以上只是一个基本思路。
下一步是使用别名或配置文件函数等将其转换为“ | more”。
HTH,Marcelo Finkielsztein