क्या आउटपुट को कुछ 'अधिक' कमांड से पाइपिंग करने का एक तरीका है, जो linux \ unix गोले में उपलब्ध है?
क्या आउटपुट को कुछ 'अधिक' कमांड से पाइपिंग करने का एक तरीका है, जो linux \ unix गोले में उपलब्ध है?
जवाबों:
खैर ... वहाँ "अधिक" है, जो कमोबेश (...) वही है जो आप अन्य प्लेटफार्मों से उम्मीद करेंगे। निम्न उदाहरण का प्रयास करें:
dir -rec | more
हाँ वहाँ है:
some-cmdlet | out-host -paging
less
सिर्फ एक बड़ा पाठ दर्शक अनुप्रयोग है जो stdin
पाठ के लिए स्वीकार करता है । आप इसे एक अस्थायी फ़ाइल में पाइप कर सकते हैं और इसे खुले में nano
या नीचे की ओर खोल सकते हैं vim
! बात नहीं है। PowerShell की तरह है bash
(लेकिन बेहतर, imho)। less
में नहीं है bash
; यह एक अलग बाइनरी है। इसलिए आपकी आलोचना मान्य नहीं है।
oh
के लिए है Out-Host
, और मापदंडों को संक्षिप्त किया जा सकता है यदि कोई संघर्ष नहीं है, तो कमांड हो सकता हैSome-Cmdlet | oh -p
dir -rec | more
बुरी सलाह है
यह स्क्रीन पर आउटपुट करने से पहले पूरे कमांड का मूल्यांकन करने के लिए पॉवरशेल का कारण होगा, कुछ ऐसा जो आउटपुट पेजिंग जैसी किसी चीज़ के लिए आवश्यक नहीं है
कुछ चरम मामलों में, यह सिस्टम को क्रैश करने का कारण बन सकता है (उदाहरण के लिए dir 'C:\' | more
)
दूसरी ओर, out-host -paging
स्क्रीन पर उपलब्ध जानकारी का उपयोग करते हुए यह उपलब्ध होगा।
out-host -paging
तो वांछित के रूप में काम करता है। more
रिमोट कमांड चलाने के दौरान पाइपिंग करने का कोई फायदा नहीं है: पूरा टेक्स्ट एक ही बार में प्रदर्शित होता है।
out-host -paging
है oh -pa
।
Powershell समुदाय एक्सटेंशन एक आसान समारोह 'कम' नाम दिया है कि, एक और अधिक पूरा यूनिक्स शैली सुविधा सेट प्रदान करता है less.exe के पोर्टेड प्रति का उपयोग कर वास्तव में पेजिंग को संभालने के लिए है।
आप इसे व्यवस्थापक शेल शुरू करके और चलाकर स्थापित कर सकते हैं :
Find-Package pscx | Install-Package -Force
( force
पुराने संस्करणों को अपग्रेड करना है)
आप इसे तार को पाइप कर सकते हैं, या फ़ाइलनाम को सीधे मापदंडों के रूप में दे सकते हैं।
type foo.txt | less
less foo.txt, bar.txt, baz.txt
यह ConEmu और Powershell windows में काम करता है, लेकिन दुर्भाग्य से यह v2.0 ISE के तहत आपके द्वारा अपेक्षित तरीके से काम नहीं करता है।
force
पुराने वर्जन को अपग्रेड करना" लगता है। थोड़ा भ्रामक।
Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
मैं "कम" कमांड को "अधिक" कमांड पर पसंद करता हूं। कम आदेश के साथ, परिणाम भी केवल आगे की ओर पीछे की ओर छेड़े जा सकते हैं।
विंडोज के लिए गिट से "कम" मेरे लिए काम करता है (मेरा पथ है C:\Program Files (x86)\Git\usr\less.exe
। मेरे पास "कम" के गो संस्करण के साथ पॉवर्सशेल में त्रुटियां थीं ।
उदाहरण:
ls|less
टाइपिंग को बचाने के लिए मैंने अपने पॉवर्सशेल प्रोफाइल में कम के लिए उपनाम "l" जोड़ा:
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
more
करने के लिए इस्तेमाल नहीं कर रहा है सीमा उत्पादन, यह करने के लिए प्रयोग किया जाता है पृष्ठ पर अंक लगाना उत्पादन और यह आसान अगर कुछ भी, एक टर्मिनल में पढ़ा जा सकता है।
क्या आप उपयोग करने के बारे में बात कर रहे हैं head
और tail
? EggHeadCafe का एक उदाहरण है:
type my.txt | select-object -first 10
type my.txt | select-object -last 10
अनुकरण करने के लिए head
और tail
।
मैंने अपने डिफ़ॉल्ट प्रोफ़ाइल में एक फ़ंक्शन परिभाषा और अन्य नाम जोड़ा
%SystemRoot%\system32\windowspowershell\v1.0\profile.ps1
यह फ़ंक्शन ज्यादातर इस ब्लॉग पर आधारित है, 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
इसलिए मैं इसे बस कॉल कर सकता हूं dir -r | more
और यह पावरशेल की पाइपलाइन के कारण तुरंत पृष्ठांकित आउटपुट शुरू कर देता है (जैसा कि अधिक.com के साथ पूर्ण आउटपुट की प्रतीक्षा करने के लिए विरोध किया गया है)।
cat C:\Temp\test.txt
बिल्ली गेट-कंटेंट के लिए एक उपनाम है - बड़ी फ़ाइलों के साथ आपको टर्मिनल के निचले भाग में अधिक - आउटपुट मिलेगा
आप -वाइट को भी जोड़ सकते हैं
cat C:\Temp\test.txt -wait
-वाइट टेल का उपयोग करने जैसा है लेकिन यह वास्तव में कमांड को रीफ़्रेश करता है जो आउटपुट को रीफ्रेश करता है
cat C:\Temp\test.txt | oh –Paging
ओह = मेजबान
मेरे पास वास्तव में यह प्रश्न था (अच्छी तरह से मैं कम चाहता था, अधिक नहीं) और पाया गया कि मेरे लिए काम करने वाले @ रीचर्ड-बरग ने पावरशेल (लेकिन लिनक्स पर नहीं) के लिए नया है, मुझे उस उत्तर से गायब चीजें मिलीं (मेरे लिए) थे: मुझे पहली बार जाने की जरूरत थी:
Find-Package pscx | Install-Package
जो तब "नौगेट पैकेज स्थापित करने" के लिए प्रेरित हुआ। मैंने ऐसा किया, लेकिन फिर -AllowClobber
पैरामीटर का उपयोग करना पड़ा Install-Package
।
तब कम उपयोग करने के लिए, मुझे यह करना पड़ा:
Set-ExecutionPolicy RemoteSigned
जो सभी ने काम किया :-)
सुझाव: फ़ाइल को एक अस्थायी / डिस्पोजेबल .txt फ़ाइल में डालें, फिर OS को आपके पसंदीदा संपादक को आमंत्रित करें, जो कि .txt एक्सटेंशन से जुड़ा हुआ है।
जाओ-प्रक्रिया | आउट-फ़ाइल temp.txt; । \ Temp.txt
नोट: हर बार जब आप इसका उपयोग करते हैं तो आप किसी भी पहले से मौजूद temp.txt फ़ाइल को अधिलेखित कर देंगे। फ़ाइल नाम बुद्धिमानी से चुनें।
उपरोक्त केवल एक मूल विचार है।
अगला चरण इसे उपनाम या प्रोफाइल फ़ंक्शन आदि का उपयोग करके "अधिक" में बदलना होगा।
HTH, Marcelo Finkielsztein