Apakah ada cara untuk memberi nomor pada keluaran dengan menyalurkannya ke beberapa perintah 'more', yang tersedia di linux \ unix shells?
powershell
Valentin Vasilyev
sumber
sumber
Jawaban:
Nah ... Ada "lebih", yang kurang lebih (...) sama dengan yang Anda harapkan dari platform lain. Coba contoh berikut:
sumber
Ya ada:
some-cmdlet | out-host -paging
sumber
less
hanyalah sebuah aplikasi penampil teks besar yang menerimastdin
teks. Anda dapat menyalurkannya ke file temp dan membukanya dinano
atauvim
untuk EVEN MOAR POWERRRR! Bukan itu intinya. PowerShell sepertibash
(tapi lebih baik, imho).less
tidak dibash
; itu adalah biner terpisah. Jadi kritik Anda tidak valid.oh
untukOut-Host
, dan parameter dapat disingkat jika tidak ada konflik, jadi perintahnya bisa jadiSome-Cmdlet | oh -p
dir -rec | more
adalah nasihat yang buruk.Ini akan menyebabkan PowerShell untuk mengevaluasi seluruh perintah sebelum mengeluarkannya ke layar, sesuatu yang tidak diperlukan untuk sesuatu seperti keluaran paginasi
Dalam beberapa kasus ekstrim, ini dapat menyebabkan sistem crash (mis.
dir 'C:\' | more
)Di sisi lain, menggunakan
out-host -paging
akan menampilkan informasi ke layar saat tersedia.sumber
out-host -paging
karya seperti yang diinginkan. Tidakmore
ada gunanya menyalurkan saat menjalankan perintah jarak jauh: seluruh teks ditampilkan sekaligus.out-host -paging
adalahoh -pa
.The Powershell Komunitas Extensions memiliki fungsi berguna bernama 'kurang' yang menyediakan fitur set Unix-gaya yang lebih lengkap, menggunakan salinan porting dari less.exe untuk benar-benar menangani paging.
Anda dapat menginstalnya dengan memulai shell admin dan menjalankan:
(itu
force
adalah untuk meningkatkan versi yang lebih lama)Anda dapat menyalurkan string ke sana, atau memberikan nama file sebagai parameter langsung.
type foo.txt | less less foo.txt, bar.txt, baz.txt
Ini berfungsi di jendela ConEmu dan Powershell, tetapi sayangnya itu tidak berfungsi seperti yang Anda harapkan di bawah ISE v2.0.
sumber
force
adalah untuk mengupgrade versi yang lebih lama" tampaknya a sedikit menyesatkan.Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
Saya lebih suka perintah "kurang" daripada perintah "lebih banyak". Dengan perintah less, hasil juga bisa ditampilkan ke belakang, bukan hanya ke depan.
"Kurang" dari Git untuk Windows berfungsi untuk saya (Jalur saya adalah
C:\Program Files (x86)\Git\usr\less.exe
. Saya mengalami kesalahan di Powershell dengan versi Gow "kurang".Contoh:
ls|less
Untuk menghemat pengetikan, saya menambahkan alias "l" di profil Powershell saya:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
sumber
less
Penggemar lain di sini. Tapi saya mendapatkan kesalahan ini. Ada saran? ________________________________________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
sumber
more
tidak digunakan untuk membatasi keluaran, ini digunakan untuk memberi nomor halaman keluaran dan membuatnya lebih mudah untuk dibaca di terminal, jika ada.Apakah Anda berbicara tentang penggunaan
head
dantail
? EggHeadCafe memiliki contoh:type my.txt | select-object -first 10 type my.txt | select-object -last 10
untuk meniru
head
dantail
.sumber
head
tail
Saya menambahkan definisi fungsi dan alias ke profil default saya di
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
Fungsi ini sebagian besar didasarkan pada entri blog ini oleh Aman Dhally dengan tambahan penanganan pengecualian untuk menekan
Q
saat 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
jadi saya bisa menyebutnya seperti
dir -r | more
dan segera memulai keluaran paged karena pipa PowerShell (sebagai lawan menunggu keluaran lengkap dengan more.com).sumber
Jika Anda telah menginstal VIM, saya sangat menikmati
dir -r | vim -R -
. Sayangnya hal ini mengalami masalah yang sama denganmore
(yaitu tanpa streaming).sumber
cat adalah alias untuk Get-Content - dengan file yang lebih besar Anda akan mendapatkan - More - output di bagian bawah terminal
Anda juga bisa menambahkan -wait
cat C:\Temp\test.txt -wait
-wait seperti menggunakan tail tetapi sebenarnya menjalankan kembali perintah hanya menyegarkan output
oh = Host Luar
sumber
Saya memiliki pertanyaan ini persis (baik saya ingin lebih sedikit, tidak lebih) dan menemukan jawaban dari @ richard-berg berhasil untuk saya, karena baru mengenal PowerShell (tetapi tidak ke Linux), saya menemukan hal-hal yang hilang dari jawaban itu (untuk saya) adalah: Pertama-tama saya harus pergi:
Find-Package pscx | Install-Package
yang kemudian diminta untuk "menginstal paket nuget". Saya melakukan ini tetapi kemudian harus menggunakan
-AllowClobber
parameter padaInstall-Package
.kemudian untuk menggunakan lebih sedikit, saya harus:
Set-ExecutionPolicy RemoteSigned
yang semuanya berfungsi :-)
sumber
Saran: Letakkan file tersebut ke dalam file .txt sementara / sekali pakai, kemudian biarkan OS memanggil editor favorit Anda, yang ditautkan ke ekstensi .txt.
Dapatkan-Proses | Temp.txt Keluar-File; . \ temp.txt
Catatan: setiap kali Anda menggunakan ini, Anda akan menimpa file temp.txt yang sudah ada sebelumnya. Pilih nama file dengan bijak.
Di atas hanyalah ide dasar.
Langkah selanjutnya adalah mengubahnya menjadi "| more" menggunakan alias atau fungsi profil, dll.
HTH, Marcelo Finkielsztein
sumber