Esiste un modo per impaginare l'output indirizzandolo a un comando "more", disponibile nelle shell linux \ unix?
Esiste un modo per impaginare l'output indirizzandolo a un comando "more", disponibile nelle shell linux \ unix?
Risposte:
Bene ... C'è "di più", che è più o meno (...) lo stesso che ti aspetteresti da altre piattaforme. Prova il seguente esempio:
dir -rec | more
Si C'è:
some-cmdlet | out-host -paging
less
è solo un grande visualizzatore di testo che accetta stdin
il testo. Puoi collegarlo a un file temporaneo e aprirlo in nano
o vim
per EVEN MOAR POWERRRR! Non è il punto. PowerShell è come bash
(ma meglio, imho). less
non è in bash
; è un binario separato. Quindi la tua critica non è valida.
oh
è per Out-Host
e i parametri possono essere abbreviati se non c'è conflitto, quindi il comando potrebbe essereSome-Cmdlet | oh -p
dir -rec | more
è un cattivo consiglio.
Farà sì che powershell valuti l'intero comando prima di inviarlo allo schermo, qualcosa che non è necessario per qualcosa come l'impaginazione dell'output
In alcuni casi estremi, potrebbe causare l'arresto anomalo del sistema (ad esempio dir 'C:\' | more
)
D'altra parte, utilizzando out-host -paging
produrrà le informazioni sullo schermo non appena disponibili.
out-host -paging
funziona come desiderato. Il collegamento more
durante l'esecuzione del comando remoto non serve: l'intero testo viene visualizzato contemporaneamente.
out-host -paging
è oh -pa
.
Le estensioni della community di Powershell hanno una comoda funzione denominata "less" che fornisce un set di funzionalità in stile Unix più completo, utilizzando una copia con port di less.exe per gestire effettivamente il paging.
Puoi installarlo avviando una shell di amministrazione ed eseguendo:
Find-Package pscx | Install-Package -Force
( force
è quello di aggiornare le versioni precedenti)
È possibile reindirizzare stringhe o fornire nomi di file come parametri diretti.
type foo.txt | less
less foo.txt, bar.txt, baz.txt
Funziona nelle finestre ConEmu e Powershell, ma sfortunatamente non funziona come ci si aspetterebbe con ISE v2.0.
force
è quello di aggiornare le versioni precedenti" sembra un un po 'fuorviante.
Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
Preferisco il comando "less" al comando "more". Con il comando less, i risultati possono anche essere spostati indietro invece che solo avanti.
Il "less" di Git per Windows funziona per me (il mio percorso è C:\Program Files (x86)\Git\usr\less.exe
. Ho avuto errori in Powershell con la versione Gow di "less".
Esempio:
ls|less
Per salvare la digitazione ho aggiunto l'alias "l" for less nel mio profilo Powershell:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
less
fan qui. Ma ottengo questo errore. Qualche consiglio? ________________________________________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
more
non è usato per limitare l' output, è usato per impaginare l' output e rendere più facile la lettura in un terminale, se non altro.
Stai parlando di usare head
e tail
? EggHeadCafe ha un esempio di:
type my.txt | select-object -first 10
type my.txt | select-object -last 10
per emulare head
e tail
.
head
e tail
in PowerShell ora: stackoverflow.com/a/41626586/1081043
Ho aggiunto una definizione di funzione e un alias al mio profilo predefinito su
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
Questa funzione si basa principalmente su questo post di blog di Aman Dhally con l'aggiunta della gestione delle eccezioni per la pressione Q
durante il paging.
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
quindi posso semplicemente chiamarlo like dir -r | more
e inizia immediatamente l' output impaginato a causa della pipeline di PowerShell (invece di aspettare l'output completo con more.com).
cat C:\Temp\test.txt
cat è un alias per Get-Content - con file più grandi otterrai l'output - Altro - nella parte inferiore del terminale
Puoi anche aggiungere -wait
cat C:\Temp\test.txt -wait
-wait è come usare tail ma in realtà sta rieseguendo il comando semplicemente aggiornando l'output
cat C:\Temp\test.txt | oh –Paging
oh = Out-Host
Avevo esattamente questa domanda (beh, volevo di meno, non di più) e ho trovato la risposta di @ richard-berg funzionava per me, essendo nuovo in PowerShell (ma non in Linux), ho trovato le cose che mancavano da quella risposta (per me) erano: prima dovevo andare:
Find-Package pscx | Install-Package
che poi ha richiesto "l'installazione del pacchetto nuget". L'ho fatto ma poi ho dovuto usare il -AllowClobber
parametro su Install-Package
.
poi per usarne di meno ho dovuto:
Set-ExecutionPolicy RemoteSigned
e tutto ha funzionato :-)
Suggerimento: inserisci il file in un file .txt temporaneo / usa e getta, quindi lascia che il sistema operativo richiami il tuo editor preferito, quello che è collegato all'estensione .txt.
Get-Process | Out-File temp.txt; . \ temp.txt
Nota: ogni volta che lo usi, sovrascriverai qualsiasi file temp.txt preesistente. Scegli il nome del file con saggezza.
Quanto sopra è solo un'idea di base.
Il prossimo passo sarebbe trasformare questo in "| more" usando alias o funzioni di profilo, ecc.
HTH, Marcelo Finkielsztein