Czy istnieje sposób na podzielenie danych wyjściowych na strony przez przekierowanie ich do jakiegoś polecenia „more”, które jest dostępne w powłokach linux \ unix?
powershell
Walentyna Wasiljewa
źródło
źródło
Odpowiedzi:
No cóż ... Jest „więcej”, czyli mniej więcej (...) to samo, czego można się spodziewać po innych platformach. Wypróbuj następujący przykład:
źródło
Tak jest:
some-cmdlet | out-host -paging
źródło
less
to po prostu duża aplikacja do przeglądania tekstu, która akceptujestdin
tekst. Możesz przesłać go do pliku tymczasowego i otworzyć go wnano
lubvim
dla EVEN MOAR POWERRRR! Nie o to chodzi. PowerShell jest podobnybash
(ale lepszy, imho).less
nie mabash
; to osobny plik binarny. Więc twoja krytyka jest nieważna.oh
jest dlaOut-Host
, a parametry mogą być skracane, jeśli nie ma konfliktu, więc polecenie może byćSome-Cmdlet | oh -p
dir -rec | more
to zła rada.Spowoduje to, że PowerShell oceni całe polecenie przed wyprowadzeniem go na ekran, co nie jest potrzebne do czegoś takiego jak stronicowanie danych wyjściowych
W skrajnych przypadkach może to spowodować awarię systemu (np.
dir 'C:\' | more
)Z drugiej strony użycie
out-host -paging
spowoduje wyświetlenie informacji na ekranie, gdy są one dostępne.źródło
out-host -paging
działa zgodnie z potrzebami. Przekazywanie potokumore
podczas wykonywania polecenia zdalnego jest bezużyteczne: cały tekst jest wyświetlany od razu.out-host -paging
tooh -pa
.W PowerShell Community Extensions posiada poręczną funkcję o nazwie „mniej”, który zapewnia bardziej kompletny Unix stylu zestaw funkcji, stosując przeniesiony kopię less.exe właściwie obsłużyć stronicowania.
Możesz go zainstalować, uruchamiając powłokę administratora i uruchamiając:
(
force
jest aktualizacja starszych wersji)Możesz przesłać do niego ciągi znaków lub podać nazwy plików jako parametry bezpośrednie.
type foo.txt | less less foo.txt, bar.txt, baz.txt
Działa w oknach ConEmu i Powershell, ale niestety nie działa tak, jak można by oczekiwać w wersji 2.0 ISE.
źródło
force
jest uaktualnienie starszych wersji” wydaje się być trochę mylące.Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
Wolę polecenie „mniej” niż polecenie „więcej”. Za pomocą polecenia less wyniki można również przewijać wstecz zamiast tylko do przodu.
„Mniej” z Git for Windows działa dla mnie (moja ścieżka to
C:\Program Files (x86)\Git\usr\less.exe
. Miałem błędy w Powershell z wersją Gow „mniej”.Przykład:
ls|less
Aby zaoszczędzić pisanie, dodałem alias "l" mniej w moim profilu Powershell:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
źródło
less
Tutaj kolejny fan. Ale otrzymuję ten błąd. Jakakolwiek rada? ________________________________________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
źródło
more
nie jest używany do ograniczania wyjścia, jest używany do podziału na strony danych wyjściowych i ułatwienia czytania w terminalu, jeśli cokolwiek.Czy mówisz o używaniu
head
itail
? EggHeadCafe ma przykład:type my.txt | select-object -first 10 type my.txt | select-object -last 10
naśladować
head
itail
.źródło
head
itail
teraz w programie PowerShell: stackoverflow.com/a/41626586/1081043Dodałem definicję funkcji i alias do mojego domyślnego profilu pod adresem
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
Ta funkcja jest głównie oparta na tym wpisie na blogu autorstwa Aman Dhally z dodatkową obsługą wyjątków dla naciskania
Q
podczas stronicowania.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
więc mogę to po prostu nazwać tak
dir -r | more
i natychmiast rozpoczyna stronicowane wyjście z powodu potoku PowerShell (w przeciwieństwie do czekania na pełne dane wyjściowe z more.com).źródło
Jeśli masz zainstalowany VIM, bardzo mi się podoba
dir -r | vim -R -
. Niestety ma to ten sam problemmore
(tj. Brak przesyłania strumieniowego).źródło
cat jest aliasem dla Get-Content - przy większych plikach otrzymasz wyjście - More - na dole terminala
Możesz także dodać -wait
cat C:\Temp\test.txt -wait
-wait jest jak użycie tail, ale w rzeczywistości ponownie uruchamia polecenie, tylko odświeżając wyjście
oh = Out-Host
źródło
Miałem dokładnie to pytanie (cóż, chciałem mniej, nie więcej) i znalazłem odpowiedź @ richard-berg działała dla mnie, będąc nowym w PowerShell (ale nie w Linuksie), znalazłem brakujących rzeczy w tej odpowiedzi (dla mnie) były: Najpierw musiałem przejść:
Find-Package pscx | Install-Package
co następnie wyświetlało monit o „zainstalowanie pakietu NuGet”. Zrobiłem to, ale potem musiałem użyć
-AllowClobber
parametru naInstall-Package
.potem żeby zużywać mniej, musiałem:
Set-ExecutionPolicy RemoteSigned
co wszystko działało :-)
źródło
Sugestia: Umieść plik w tymczasowym / jednorazowym pliku .txt, a następnie pozwól systemowi operacyjnemu wywołać Twój ulubiony edytor, który jest powiązany z rozszerzeniem .txt.
Get-Process | Out-File temp.txt; . \ temp.txt
Uwaga: za każdym razem, gdy tego użyjesz, nadpiszesz każdy istniejący plik temp.txt. Mądrze wybierz nazwę pliku.
Powyższe to tylko podstawowa idea.
Następnym krokiem byłoby przekształcenie tego w "| more" przy użyciu aliasów lub funkcji profilu itp.
HTH, Marcelo Finkielsztein
źródło