¿Hay alguna forma de paginar la salida canalizándola a algún comando 'más', que está disponible en linux \ unix shells?
powershell
Valentin Vasilyev
fuente
fuente

Respuestas:
Bueno ... hay "más", que es más o menos (...) lo mismo que esperarías de otras plataformas. Prueba el siguiente ejemplo:
fuente
Sí hay:
some-cmdlet | out-host -pagingfuente
lesses solo una gran aplicación de visualización de texto que aceptastdinel texto. ¡Puede canalizarlo a un archivo temporal y abrirlo ennanoovimpara EVEN MOAR POWERRRR! No es la cuestión. PowerShell es comobash(pero mejor, en mi humilde opinión).lessno está enbash; es un binario separado. Entonces tu crítica no es válida.ohes paraOut-Hosty los parámetros se pueden abreviar si no hay conflicto, por lo que el comando podría serSome-Cmdlet | oh -pdir -rec | morees un mal consejo.Hará que powershell evalúe todo el comando antes de enviarlo a la pantalla, algo que no es necesario para algo como la paginación de salida
En algunos casos extremos, podría provocar que el sistema se bloquee (p
dir 'C:\' | more. Ej. )Por otro lado, usando
out-host -pagingmostrará información en la pantalla cuando esté disponible.fuente
out-host -pagingfunciona como se desea. La canalizaciónmorecuando se ejecuta el comando remoto no sirve de nada: el texto completo se muestra a la vez.out-host -pagingesoh -pa.Las extensiones de la comunidad de Powershell tienen una función práctica llamada 'menos' que proporciona un conjunto de características más completo al estilo Unix, utilizando una copia portada de less.exe para manejar realmente la paginación.
Puede instalarlo iniciando un shell de administración y ejecutando:
(los
forcees para actualizar versiones anteriores)Puede canalizar cadenas o asignar nombres de archivo como parámetros directos.
type foo.txt | less less foo.txt, bar.txt, baz.txtFunciona en las ventanas ConEmu y Powershell, pero desafortunadamente no funciona de la manera que esperarías con el ISE v2.0.
fuente
forcees para actualizar versiones anteriores" parece un un poco engañoso.Find-Package pscx | Install-Package -Force -scope currentuser -allowclobberPrefiero el comando "menos" sobre el comando "más". Con el comando less, los resultados también se pueden paginar hacia atrás en lugar de solo hacia adelante.
El "menos" de Git para Windows funciona para mí (Mi camino es
C:\Program Files (x86)\Git\usr\less.exe. Tuve errores en Powershell con la versión de Gow de "menos".Ejemplo:
ls|lessPara evitar escribir, agregué el alias "l" por menos en mi perfil de Powershell:
sal l "C:\Program Files (x86)\Git\bin\less.exe"fuente
lessfan aquí. Pero obtengo este error. ¿Algún consejo? ________________________________________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.OutHostCommandPS> cd C:\ PS> dir -r -ex 0 | out-Host -paging PS> dir -file -r -ea 0 c:\Windows | Select FullName,Length,LastWriteTime | out-gridviewfuente
moreno se usa para limitar la salida, se usa para paginar la salida y hacer que sea más fácil de leer en una terminal, en todo caso.¿Estás hablando de usar
headytail? EggHeadCafe tiene un ejemplo de:type my.txt | select-object -first 10 type my.txt | select-object -last 10emular
headytail.fuente
headytailen powershell ahora: stackoverflow.com/a/41626586/1081043Agregué una definición de función y un alias a mi perfil predeterminado en
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1Esta función se basa principalmente en esta entrada de blog de Aman Dhally con manejo de excepciones agregado para presionar
Qdurante la paginación.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 more2así que puedo llamarlo como
dir -r | moree inmediatamente comienza la salida paginada debido a la canalización de PowerShell (en lugar de esperar la salida completa con more.com).fuente
Si tiene VIM instalado, lo disfruto muchísimo
dir -r | vim -R -. Desafortunadamente, esto tiene el mismo problemamore(es decir, sin transmisión).fuente
cat es un alias de Get-Content; con archivos más grandes, obtendrá el resultado - Más - en la parte inferior de la terminal
También puede agregar -wait
cat C:\Temp\test.txt -wait-wait es como usar tail, pero en realidad está volviendo a ejecutar el comando simplemente actualizando la salida
oh = fuera del anfitrión
fuente
Tenía exactamente esta pregunta (bueno, quería menos, no más) y encontré que la respuesta de @ richard-berg funcionó para mí, siendo nuevo en PowerShell (pero no en Linux), encontré las cosas que faltaban en esa respuesta (para mí) were: Primero necesitaba ir:
Find-Package pscx | Install-Packageque luego solicitó "instalar el paquete nuget". Hice esto pero luego tuve que usar el
-AllowClobberparámetro enInstall-Package.luego, para usar menos, tuve que:
Set-ExecutionPolicy RemoteSignedque todo funcionó :-)
fuente
Sugerencia: coloque el archivo en un archivo .txt temporal / desechable, luego deje que el sistema operativo invoque su editor favorito, el que está vinculado a la extensión .txt.
Obtener-Proceso | Temp.txt de archivo de salida; . \ temp.txt
Nota: cada vez que use esto, sobrescribirá cualquier archivo temp.txt preexistente. Elija sabiamente el nombre del archivo.
Lo anterior es solo una idea básica.
El siguiente paso sería transformar esto en "| más" usando alias o funciones de perfil, etc.
HTH, Marcelo Finkielsztein
fuente