Çıktıyı linux \ unix kabuklarında bulunan bazı 'daha fazla' komuta borulayarak sayfalandırmanın bir yolu var mı?
Çıktıyı linux \ unix kabuklarında bulunan bazı 'daha fazla' komuta borulayarak sayfalandırmanın bir yolu var mı?
Yanıtlar:
Pekala ... "Daha fazla" var, bu da aşağı yukarı (...) diğer platformlardan beklediğinizle aynı. Aşağıdaki örneği deneyin:
dir -rec | more
Evet var:
some-cmdlet | out-host -paging
less
sadece metin stdin
için kabul eden büyük bir metin görüntüleme uygulamasıdır . Onu geçici bir dosyaya aktarabilir ve içinde nano
veya vim
EVEN MOAR POWERRRR için açabilirsiniz! Konu değil. PowerShell gibidir bash
(ama daha iyisi, imho). less
içinde değil bash
; bu ayrı bir ikili. Yani eleştiriniz geçerli değil.
oh
içindir Out-Host
ve herhangi bir çakışma yoksa parametreler kısaltılabilir, bu nedenle komut şöyle olabilirSome-Cmdlet | oh -p
dir -rec | more
kötü bir tavsiye.
Bu, powershell'in tüm komutu ekrana çıktılamadan önce değerlendirmesine neden olur, bu da çıktı sayfalama gibi bir şey için gerekli değildir.
Bazı aşırı durumlarda, sistemin çökmesine neden olabilir (örn. dir 'C:\' | more
)
Öte yandan, out-host -paging
kullanımı mevcut olduğu şekilde ekrana bilgi çıkışı sağlayacaktır.
out-host -paging
istediğinizde , boru hattı istenildiği gibi çalışır. more
Uzaktan komut çalıştırılırken bağlantıya geçmenin faydası yoktur: metnin tamamı aynı anda görüntülenir.
out-host -paging
DİR oh -pa
.
PowerShell Topluluk Uzantıları aslında çağrıyı işlemek için less.exe bir portlu kopyasını kullanarak, daha eksiksiz Unix tarzı özellik kümesi sağlar 'daha az' adlı bir kullanışlı fonksiyonu var.
Bir yönetici kabuğu başlatıp şunu çalıştırarak kurabilirsiniz :
Find-Package pscx | Install-Package -Force
( force
eski sürümleri yükseltmektir)
Dizeleri ona yönlendirebilir veya doğrudan parametreler olarak dosya adları verebilirsiniz.
type foo.txt | less
less foo.txt, bar.txt, baz.txt
ConEmu ve Powershell pencerelerinde çalışır, ancak maalesef v2.0 ISE'de beklediğiniz şekilde çalışmaz.
force
eski sürümleri yükseltmek için" biraz yanıltıcı.
Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
"Daha az" komutunu "daha fazla" komutuna tercih ederim. Daha az komutla, sonuçlar sadece ileri doğru değil geriye doğru da sayfalanabilir.
Windows için Git'teki "daha az" benim için çalışıyor (Benim yolum, C:\Program Files (x86)\Git\usr\less.exe
Powershell'de "daha az" Gow sürümünde hatalar yaşadım .
Misal:
ls|less
Yazmayı kaydetmek için Powershell profilime "l" takma adını daha ucuza ekledim:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
less
Burada başka bir hayran. Ama bu hatayı alıyorum. Herhangi bir tavsiye? ________________________________________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
için kullanılmaz sınır çıkışı, bu için kullanılan paginate çıktı ve bir şey olursa daha kolay bir terminalde okumayı kolaylaştırır.
Kullandığınız bahsediyorsun head
ve tail
? EggHeadCafe'in bir örneği vardır:
type my.txt | select-object -first 10
type my.txt | select-object -last 10
taklit etmek head
ve tail
.
head
ve yapmanın daha iyi yolları (yerleşik seçenekler) var tail
: stackoverflow.com/a/41626586/1081043
Adresindeki varsayılan profilime bir işlev tanımı ve takma ad ekledim
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
Bu işlev çoğunlukla Aman Dhally'nin bu blog girişine dayanmaktadır ve Q
sayfalandırma sırasında basmak için istisna işleme eklenmiştir .
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
bu yüzden onu sadece beğenebilirim dir -r | more
ve PowerShell'in ardışık düzeni nedeniyle sayfalı çıktıya hemen başlar (more.com ile tam çıktı beklemenin aksine).
cat C:\Temp\test.txt
cat, Get-Content için bir takma addır - daha büyük dosyalarla terminalin altında - Daha Fazla - çıktısını alırsınız
Ayrıca -wait ekleyebilirsiniz.
cat C:\Temp\test.txt -wait
-wait, tail'i kullanmak gibidir, ancak aslında komutu yeniden çalıştırarak çıktıyı yeniler
cat C:\Temp\test.txt | oh –Paging
oh = Ana Bilgisayar Dışı
Tam olarak bu soruyu sormuştum (daha az istedim, daha fazlasını değil) ve @ richard-berg'in yanıtının benim için çalıştığını, PowerShell'de yeni olduğunu (ancak Linux için değil) buldum, bu cevapta eksik olan şeyleri buldum (benim için) şunlardı: Önce gitmem gerekiyordu:
Find-Package pscx | Install-Package
bu da "nuget paketini kurmamı" istedi. Bunu yaptım ama sonra -AllowClobber
parametreyi kullanmak zorunda kaldım Install-Package
.
sonra daha az kullanmak için yapmam gerekiyordu:
Set-ExecutionPolicy RemoteSigned
hangisi işe yaradı :-)
Öneri: Dosyayı geçici / tek kullanımlık bir .txt dosyasına koyun, ardından işletim sisteminin .txt uzantısına bağlı olan favori düzenleyicinizi çağırmasına izin verin.
Get-Süreci | Dosya Dışı temp.txt; . \ temp.txt
Not: Bunu her kullandığınızda, önceden var olan herhangi bir temp.txt dosyasının üzerine yazacaksınız. Dosya adını akıllıca seçin.
Yukarıdakiler sadece temel bir fikirdir.
Sonraki adım, takma adlar veya profil işlevleri vb. Kullanarak bunu "| daha fazlasına" dönüştürmek olacaktır.
HTH, Marcelo Finkielsztein