Apakah ada cara untuk memberi nomor pada keluaran dengan menyalurkannya ke beberapa perintah 'more', yang tersedia di linux \ unix shells?
Apakah ada cara untuk memberi nomor pada keluaran dengan menyalurkannya ke beberapa perintah 'more', yang tersedia di linux \ unix shells?
Jawaban:
Nah ... Ada "lebih", yang kurang lebih (...) sama dengan yang Anda harapkan dari platform lain. Coba contoh berikut:
dir -rec | more
Ya ada:
some-cmdlet | out-host -paging
less
hanyalah sebuah aplikasi penampil teks besar yang menerima stdin
teks. Anda dapat menyalurkannya ke file temp dan membukanya di nano
atau vim
untuk EVEN MOAR POWERRRR! Bukan itu intinya. PowerShell seperti bash
(tapi lebih baik, imho). less
tidak di bash
; itu adalah biner terpisah. Jadi kritik Anda tidak valid.
oh
untuk Out-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.
out-host -paging
karya seperti yang diinginkan. Tidak more
ada gunanya menyalurkan saat menjalankan perintah jarak jauh: seluruh teks ditampilkan sekaligus.
out-host -paging
adalah oh -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:
Find-Package pscx | Install-Package -Force
(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.
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"
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
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
dan tail
? EggHeadCafe memiliki contoh:
type my.txt | select-object -first 10
type my.txt | select-object -last 10
untuk meniru head
dan 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).
cat C:\Temp\test.txt
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
cat C:\Temp\test.txt | oh –Paging
oh = Host Luar
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 pada Install-Package
.
kemudian untuk menggunakan lebih sedikit, saya harus:
Set-ExecutionPolicy RemoteSigned
yang semuanya berfungsi :-)
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