2012-03-27 6 views
9

पावरशेल में आप pushd (Push-Location के लिए उपनाम) और popd (Pop-Location के लिए उपनाम) को स्थानांतरित करने और स्थान स्टैक से पॉप आइटम को पुश करने के लिए उपयोग कर सकते हैं।मैं पावरशेल के स्थान स्टैक को आगे की तरह स्वैप ऑपरेशन के साथ कैसे उपयोग करूं?

यह निर्देशिका के ढेर के लिए bash के pushd और popd कार्यक्षमता के समान है।

लेकिन बैश की एक और अच्छी विशेषता यह है कि आप स्टैक पर शीर्ष दो स्थानों को स्वैप करने के लिए pushd का उपयोग कर सकते हैं। तो आप एक स्थान और दूसरे के बीच बहुत जल्दी आगे फ्लिप कर सकते हैं। और यह pushd +3 जैसे तर्क भी लेता है ताकि आप उस स्थान के साथ स्वैप कर सकें जो आपके स्टैक में कुछ तत्व नीचे है।

क्या PowerShell के साथ ऐसा करने का कोई तरीका है?

उदाहरण के लिए, पार्टी में:

$ pwd 
/bin 
$ pushd ~ 
~ /bin 
$ pwd 
/home/hopper 
$ pushd 
/bin ~ 
$ pwd 
/bin 
$ pushd 
~ /bin 
$ pwd 
/home/hopper 

उत्तर

5

वहाँ साल के लिए इसी तरह की PowerShell Community Extensions में निर्मित कार्यक्षमता कर दिया गया है :-) उदाहरण:

 
48 > cd C:\inetpub 
C:\inetpub 
49 > cd C:\Windows\System32 
C:\Windows\System32 
50 > cd - 
C:\inetpub 
51 > cd + 
C:\Windows\System32 
52 > cd 

    # Directory Stack: 
    --- ---------------- 
    0 C:\Users\Keith 
    1 C:\inetpub 
-> 2 C:\Windows\System32 

53 > cd -0 
C:\Users\Keith 

हालांकि यह काफी स्वैप नहीं है, पिछड़ा (-) और आगे (+) रूपक इन दिनों बहुत अच्छी तरह से स्थापित है। और आप -<num> निर्दिष्ट करके स्थान इतिहास में किसी भी स्थान पर जाएं। वास्तव में, और यह एक पीएससीएक्स उपयोगकर्ता द्वारा सुझाए गए एक बहुत ही आसान जोड़ था, आप एक फ़ाइल फ़ाइल में सीडी कर सकते हैं (जो सिर्फ फाइल में डीआईआर के लिए सीडी है) उदा।:

cd $profile 

आदेश में PSCX में इस कार्यक्षमता जब आप मॉड्यूल जैसे आयात Pscx.UserPreference.ps1 फ़ाइल निर्दिष्ट करना सक्षम करने के लिए:

Import-Module PSCX -arg ~\Pscx.UserPreferences.ps1 

इस मामले में, मैं से फ़ाइल की प्रतिलिपि पीएससीएक्स मेरे घर के डीआईआर डीआईआर और मेरे स्वाद के अनुरूप संशोधित करता है। अधिक जानकारी के लिए निष्पादित करें:

cd -? 

या

man cd -full 

इस नेस्टेड मॉड्यूल के लिए पूर्ण स्रोत here (on CodePlex) है।

+0

यह एक बहुत अच्छी सुविधा है :-) इच्छा है कि बनाया गया था! मैं env चर और टैब पूरा होने का उपयोग कर के आसपास नेविगेट करते हैं, लेकिन यह वापस करने और अपने खोल पर आगे बटन :-) –

+0

यह दिलचस्प लग रहा है होने की तरह है, और कुछ मायनों बैश के 'धक्का + n' आदेश द्वारा प्रदान की swapn कार्यक्षमता से अच्छे में। – Omnifarious

8

आप -Stack स्विच के साथ अपने ढेर Get-Location का उपयोग कर पहुँच सकते हैं। एक ढेर की प्रकृति के रूप में यह लिफो है।

  • $stack.ToArray()[-1]: Get-Location -Stack तो आप इस तरह अलग-अलग ढेर आइटम एक्सेस कर सकते एक System.Management.Automation.PathInfoStack वस्तु बनाता है पहले धक्का दिया आइटम हो जाता है।
  • $stack.ToArray()[0]: आखिरी धक्का दिया गया आइटम प्राप्त करता है। $stack.Peek() के समान।

तो जवाब यह है कि आपकी ढेर आदेश को संशोधित करने के लिए Push-Location स्विच में बनाया नहीं है, लेकिन यदि आप ऐसा करना एक समारोह बना सकते हैं। ध्यान दें कि यह डिफ़ॉल्ट ढेर में हेरफेर करता है। जैसा कि नाम का तात्पर्य है कि आप Push-Location -StackName MyStack का उपयोग करके अपना खुद का ढेर बना सकते हैं। आप Set-Location -StackName MyStack का उपयोग कर अपने कस्टम स्टैक पर डिफ़ॉल्ट स्टैक भी बदल सकते हैं।

मुझे पॉप/पुश cmdlets का उपयोग किए बिना स्टैक ऑब्जेक्ट सेट करने का कोई तरीका नहीं मिला। इसलिए मुझे इसे इस तरह से लागू करना था जो कि मैं कर सकता था उससे भी अधिक कठिन है ... लेकिन यहां एक छोटा सा कार्य है जो आपको ढेर के शीर्ष दो पथों को स्वैप करने की अनुमति देता है।

function Swap-StackTop { 
    param ($StackName = "default") 
    $origPath = $PWD 
    $stack = Get-Location -StackName $StackName 
    $stackArray = $stack.ToArray() 
    $last = $stackArray[0] 
    $beforeLast = $stackArray[1] 
    $stackArray[0] = $beforeLast 
    $stackArray[1] = $last 
    $stackArray | % {Pop-Location} 
    Set-Location -Path $stackArray[-1].Path 
    $stackArray[($stackArray.Count-2)..0] | % { 
     Push-Location $_.Path 
    } 
    Push-Location -Path $origPath.Path 
} 

cd C:\ 
Push-Location 'C:\Users' 
Push-Location 'C:\Program Files' 
Push-Location C:\Windows 
Get-Location -Stack 

आउटपुट:

Path 
---- 
C:\Program Files 
C:\Users 
C:\ 

अब स्वैप शीर्ष दो रास्ते:

Swap-StackTop 
Get-Location -Stack 

आउटपुट:

Path 
---- 
C:\Users 
C:\Program Files 
C:\ 
+0

अच्छा थोड़ा वहाँ समारोह; आपको इसे pscx.codeplex.com – x0n

+0

में योगदान देना चाहिए यह एक दिलचस्प हैक है। यह एक सामान्यीकृत स्वैप तक विस्तार करने के लिए बहुत कठिन नहीं लग रहा है। – Omnifarious

0

धन्यवाद, Keith Hill, CD.psm1 मॉड्यूल के लिए!

मैं बुनियादी ढेर कोड लिया और एक और अधिक PowerShell की तरह वाक्य रचना के साथ इसे लागू किया। स्टैक के बीच में स्थानों को बदलते समय मैंने स्टैक प्रविष्टियों को आगे बढ़ाने के लिए इसे थोड़ा सा भी संशोधित किया। किसी को भी दिलचस्पी रखता है के लिए, यह PowerShell गैलरी में उपलब्ध है:

https://www.powershellgallery.com/packages/LocationHistory/

संबंधित मुद्दे

 संबंधित मुद्दे