มีวิธีการแบ่งหน้าผลลัพธ์โดยการไพพ์ไปยังคำสั่ง 'เพิ่มเติม' บางคำซึ่งมีอยู่ใน linux \ unix เชลล์หรือไม่
มีวิธีการแบ่งหน้าผลลัพธ์โดยการไพพ์ไปยังคำสั่ง 'เพิ่มเติม' บางคำซึ่งมีอยู่ใน linux \ unix เชลล์หรือไม่
คำตอบ:
อืม ... มี "มากกว่า" ซึ่งมากหรือน้อย (... ) เหมือนกับที่คุณคาดหวังจากแพลตฟอร์มอื่น ๆ ลองใช้ตัวอย่างต่อไปนี้:
dir -rec | more
ใช่มี:
some-cmdlet | out-host -paging
less
เป็นเพียงแอปพลิเคชันโปรแกรมดูข้อความขนาดใหญ่ที่ยอมรับstdin
ข้อความ คุณสามารถไพพ์ไปยังไฟล์ temp และเปิดในnano
หรือvim
สำหรับ EVEN MOAR POWERRRR! ไม่ใช่ประเด็น PowerShell เป็นเหมือนbash
(แต่ดีกว่า imho) less
ไม่ได้อยู่ในbash
; มันเป็นไบนารีแยกต่างหาก ดังนั้นคำวิจารณ์ของคุณจึงไม่ถูกต้อง
oh
มีไว้สำหรับOut-Host
และสามารถย่อพารามิเตอร์ได้หากไม่มีข้อขัดแย้งดังนั้นคำสั่งอาจเป็นSome-Cmdlet | oh -p
dir -rec | more
เป็นคำแนะนำที่ไม่ดี
มันจะทำให้ powershell ประเมินคำสั่งทั้งหมดก่อนที่จะส่งออกไปยังหน้าจอสิ่งที่ไม่จำเป็นสำหรับบางอย่างเช่นการแบ่งหน้าผลลัพธ์
ในบางกรณีที่รุนแรงอาจทำให้ระบบขัดข้อง (เช่นdir 'C:\' | more
)
ในทางกลับกันการใช้out-host -paging
จะส่งออกข้อมูลไปยังหน้าจอตามที่มีอยู่
out-host -paging
ทำงานได้ตามต้องการ การส่งผ่านmore
เมื่อเรียกใช้คำสั่งระยะไกลจะไม่มีประโยชน์: ข้อความทั้งหมดจะแสดงพร้อมกัน
out-host -paging
คือoh -pa
.
Powershell ส่วนขยายชุมชนมีฟังก์ชั่นที่มีประโยชน์ที่ชื่อว่า 'น้อย' ที่ให้ Unix สไตล์ชุดคุณลักษณะที่สมบูรณ์มากขึ้นโดยใช้สำเนารังเพลิงของ less.exe จริงจัดการเพจจิ้ง
คุณสามารถติดตั้งได้โดยเริ่มเชลล์ผู้ดูแลระบบและเรียกใช้:
Find-Package pscx | Install-Package -Force
( force
คือการอัปเกรดเวอร์ชันเก่า)
คุณสามารถไพพ์สตริงหรือตั้งชื่อไฟล์เป็นพารามิเตอร์โดยตรง
type foo.txt | less
less foo.txt, bar.txt, baz.txt
ใช้งานได้ในหน้าต่าง ConEmu และ Powershell แต่น่าเสียดายที่มันไม่ได้ผลอย่างที่คุณคาดหวังภายใต้ ISE v2.0
force
คือการอัปเกรดเวอร์ชันเก่า" จึงดูเหมือน ทำให้เข้าใจผิดเล็กน้อย
Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
ฉันชอบคำสั่ง "less" มากกว่าคำสั่ง "more" ด้วยคำสั่ง less ผลลัพธ์ยังสามารถเพจไปข้างหลังแทนที่จะส่งต่อ
"น้อยกว่า" จากGit สำหรับ Windowsใช้ได้กับฉัน (เส้นทางของฉันคือC:\Program Files (x86)\Git\usr\less.exe
ฉันมีข้อผิดพลาดใน Powershell กับ"less" เวอร์ชันGow
ตัวอย่าง:
ls|less
ในการบันทึกการพิมพ์ฉันได้เพิ่มนามแฝง "l" ให้น้อยลงในโปรไฟล์ Powershell ของฉัน:
sal l "C:\Program Files (x86)\Git\bin\less.exe"
less
แฟนอีกคนที่นี่. แต่ฉันได้รับข้อผิดพลาดนี้ คำแนะนำใด ๆ? ________________________________________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
ไม่ได้ใช้เพื่อจำกัดเอาต์พุตมันใช้เพื่อแบ่งหน้าเอาต์พุตและทำให้อ่านในเทอร์มินัลได้ง่ายขึ้นถ้ามีอะไร
คุณกำลังพูดถึงการใช้head
และtail
? EggHeadCafeมีตัวอย่างของ:
type my.txt | select-object -first 10
type my.txt | select-object -last 10
เพื่อเลียนแบบhead
และtail
.
head
และtail
ใน powershell ตอนนี้: stackoverflow.com/a/41626586/1081043
ฉันได้เพิ่มนิยามฟังก์ชันและนามแฝงในโปรไฟล์เริ่มต้นของฉันที่
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
ฟังก์ชันนี้ส่วนใหญ่อิงตามรายการบล็อกนี้โดย Aman Dhallyพร้อมด้วยการจัดการข้อยกเว้นเพิ่มเติมสำหรับการกดQ
ขณะเพจ
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
ดังนั้นฉันสามารถเรียกมันว่า like dir -r | more
และมันจะเริ่มเอาต์พุตเพจทันทีเนื่องจากไปป์ไลน์ของ PowerShell (ตรงข้ามกับการรอผลลัพธ์ที่สมบูรณ์ด้วย more.com)
dir -r | vim -R -
หากคุณมีการติดตั้งเสียงเรียกผมอย่างทั่วถึงเพลิดเพลินกับ น่าเสียดายที่สิ่งนี้ประสบปัญหาเดียวกันกับmore
(กล่าวคือไม่มีการสตรีม)
cat C:\Temp\test.txt
cat เป็นนามแฝงสำหรับ Get-Content - ด้วยไฟล์ขนาดใหญ่คุณจะได้รับ - เพิ่มเติม - เอาต์พุตที่ด้านล่างของเทอร์มินัล
คุณยังสามารถเพิ่ม -wait
cat C:\Temp\test.txt -wait
-wait เหมือนกับการใช้ tail แต่จริงๆแล้วมันเป็นการเรียกใช้คำสั่งใหม่เพียงแค่รีเฟรชเอาต์พุต
cat C:\Temp\test.txt | oh –Paging
โอ้ = โฮสต์นอก
ฉันมีคำถามนี้อย่างตรงไปตรงมา (ฉันต้องการน้อยลงไม่มาก) และพบว่าคำตอบของ @ richard-berg ใช้ได้ผลสำหรับฉันซึ่งยังใหม่กับ PowerShell (แต่ไม่ใช่สำหรับ Linux) ฉันพบสิ่งที่ขาดหายไปจากคำตอบนั้น (สำหรับฉัน) คือ: ก่อนอื่นฉันต้องไป:
Find-Package pscx | Install-Package
ซึ่งได้รับแจ้งให้ "ติดตั้งแพ็คเกจ nuget" ฉันทำสิ่งนี้แล้ว แต่ก็ต้องใช้-AllowClobber
พารามิเตอร์บนInstall-Package
.
จากนั้นเพื่อที่จะใช้น้อยลงฉันต้อง:
Set-ExecutionPolicy RemoteSigned
ซึ่งทั้งหมดได้ผล :-)
คำแนะนำ: ใส่ไฟล์ลงในไฟล์. txt ชั่วคราว / ใช้แล้วทิ้งจากนั้นให้ระบบปฏิบัติการเรียกใช้ตัวแก้ไขที่คุณชื่นชอบซึ่งเป็นไฟล์ที่เชื่อมโยงกับนามสกุล.
รับกระบวนการ | ไฟล์ชั่วคราว temp.txt; . \ temp.txt
หมายเหตุ: ทุกครั้งที่คุณใช้สิ่งนี้คุณจะเขียนทับไฟล์ temp.txt ที่มีอยู่แล้ว เลือกชื่อไฟล์อย่างชาญฉลาด
ข้างต้นเป็นเพียงแนวคิดเบื้องต้น
ขั้นตอนต่อไปคือการเปลี่ยนสิ่งนี้เป็น "| เพิ่มเติม" โดยใช้นามแฝงหรือฟังก์ชันโปรไฟล์เป็นต้น
HTH, Marcelo Finkielsztein