¿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 -paging
fuente
less
es solo una gran aplicación de visualización de texto que aceptastdin
el texto. ¡Puede canalizarlo a un archivo temporal y abrirlo ennano
ovim
para EVEN MOAR POWERRRR! No es la cuestión. PowerShell es comobash
(pero mejor, en mi humilde opinión).less
no está enbash
; es un binario separado. Entonces tu crítica no es válida.oh
es paraOut-Host
y los parámetros se pueden abreviar si no hay conflicto, por lo que el comando podría serSome-Cmdlet | oh -p
dir -rec | more
es 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 -paging
mostrará información en la pantalla cuando esté disponible.fuente
out-host -paging
funciona como se desea. La canalizaciónmore
cuando se ejecuta el comando remoto no sirve de nada: el texto completo se muestra a la vez.out-host -paging
esoh -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
force
es 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.txt
Funciona en las ventanas ConEmu y Powershell, pero desafortunadamente no funciona de la manera que esperarías con el ISE v2.0.
fuente
force
es para actualizar versiones anteriores" parece un un poco engañoso.Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
Prefiero 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|less
Para evitar escribir, agregué el alias "l" por menos en mi perfil de Powershell:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
fuente
less
fan 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.OutHostCommand
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
fuente
more
no 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
head
ytail
? EggHeadCafe tiene un ejemplo de:type my.txt | select-object -first 10 type my.txt | select-object -last 10
emular
head
ytail
.fuente
head
ytail
en 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.ps1
Esta función se basa principalmente en esta entrada de blog de Aman Dhally con manejo de excepciones agregado para presionar
Q
durante 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 more2
así que puedo llamarlo como
dir -r | more
e 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-Package
que luego solicitó "instalar el paquete nuget". Hice esto pero luego tuve que usar el
-AllowClobber
parámetro enInstall-Package
.luego, para usar menos, tuve que:
Set-ExecutionPolicy RemoteSigned
que 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