PowerShell: इतिहास एन्हांसमेंट्स (रीडलाइन)?


12

कुछ चीजें जो मुझे बैश में पसंद हैं और पॉवरशेल में कैसे करें, यह जानना पसंद करेंगे:

  1. बैश में, मेरे पास इतिहास स्क्रॉलिंग सेट है ताकि यह केवल उन कमांड्स को स्क्रॉल करे जो वर्तमान लाइन के समान उपसर्ग के साथ शुरू होते हैं। अगर मैं अपनी नवीनतम कमिटमेंट देखना चाहता हूं (उदाहरण के लिए टिप्पणी का पुन: उपयोग करना) तो मैं 'गिट' लिखता हूं और फिर

  2. संबंधित निश्चित रूप से Ctrl+ के साथ इतिहास की खोज हैR

  3. अन्य चीजों को खोजने के लिए, मैं लिखता हूं:

    h | grep foo
    

    PowerShell में मैं उपयोग करता हूं:

    h -c 1000 | where {$_.commandline.contains("foo")}
    

    (जाहिर है मैं एक नौसिखिया हूँ, एक छोटा रास्ता होना चाहिए)

  4. इस तरह की चीजें:

    mv file.txt{,.bak}
    

    या

    mv file.txt !#$.bak
    
  5. मैजिक स्पेस (जो !$इनलाइन का विस्तार करता है )

PowerShell में विकल्प क्या हैं?

जवाबों:


2

(3) के लिए, आप इसे अपनी प्रोफ़ाइल में एक फ़ंक्शन के रूप में लिख सकते हैं (उदाहरण के लिए %USERPROFILE%\My Documents\WindowsPowerShell\profile.ps1):

function hh ([string] $word) {
    Get-History -c 1000 | where {$_.commandline.contains($word)}
}

फिर:

hh foo

लेकिन Powershell को एक स्क्रिप्टिंग भाषा के रूप में एक इंटरैक्टिव शेल के रूप में सबसे अच्छा माना जाता है, क्योंकि अंतर्निहित कंसोल अभी भी अपनी सभी सीमाओं के साथ cmd.exe है।

इसलिए यह इंटरेक्टिव इतिहास के लिए F7 है, पिछले कमांड को कॉपी करने के लिए F3, किसी एक कैरेक्टर को कॉपी करने के लिए F1, F2 किसी खास कैरेक्टर तक पिछले कमांड को कॉपी करने के लिए है, आदि।


1
अंतर्निहित कंसोल अभी भी cmd है? मैंने ऐसा नहीं सोचा था।
sinni800

1
कंसोल विंडोज़ कंसोल सबसिस्टम है, जिसका उपयोग cmd और किसी अन्य कंसोल एप्लिकेशन द्वारा भी किया जाता है। इसमें बहुत सारी अजीब चीजें हैं, जैसे स्ट्रीम और कमांड संपादन और अजीब चयन और टीएबी पूरा करना। Powershell ISE v3 बहुत अच्छा है, लेकिन "विरासत" कंसोल एप्लिकेशन के साथ अच्छी तरह से काम नहीं करता है। ISE में Cmdlets महान हैं।
जय बज़ुजी

15

1 - आप F8वर्तमान लाइन की शुरुआत से मेल खाने वाली कमांड के माध्यम से विंडोज़ कंसोल से साइकिल का उपयोग कर सकते हैं । यह एक केस सेंसिटिव मैच है।

2 - आप #पिछले आदेशों का मिलान करने के लिए उपयोग कर सकते हैं । उपयोग करना #<partial match><tab>असंवेदनशील है और पिछले कमांड में किसी भी स्थिति में पाठ से मेल खाएगा।

यदि आपके पास निम्न कमांड इतिहास है:

# 1
$np = Start-Process notepad -PassThru
# 2
$np| get-process
# 3
$np| Stop-Process

टाइपिंग #prफिर tabबार-बार 1, 2 और 3 के माध्यम से चक्र करेगी।

टाइपिंग #stफिर tab1 और 3 के माध्यम से बार-बार होगी।

केवल # का उपयोग करना सभी इतिहास से मेल खाएगा।

#कमांड के भाग में प्रवेश करने के बाद भी इसका उपयोग किया जा सकता है। यदि आपका इतिहास है:

'notepad'
select *

आप Get-Process #n<tab>| #s<tab>प्राप्त करने के लिए टाइप कर सकते हैंGet-Process 'notepad'| select *

3 - आप उपयोग कर सकते हैं Select-String। इसका उपयोग करने के लिए एक उपनाम बनाएँ, इसे उपयोग करना आसान है (PowerShell v3 ने अन्य नाम जोड़ा sls)। तुम तब कर सकते थे।

h| sls foo

4 - आप कुछ ऐसा कर सकते हैं:

gci *a.txt| ren -n {$_.Name + '.bak'}

5 - $$अंतिम कमांड के अंतिम टोकन से मेल खाता है, लेकिन मुझे इनलाइन का विस्तार करने का तरीका नहीं पता है।


2

आपको Oisin Grehan का PSReadline मॉड्यूल देखना चाहिए: http://nivot.org/blog/post/2012/09/12/Emulating-Bash-GNU-Readline-with-PowerShell-30

कोड यहां उपलब्ध है: https://bitbucket.org/oising/psreadline/overview

यह PowerShell को वास्तव में CLI के रूप में प्रयोग करने योग्य बनाता है, अनुभवी * निक्स के दृष्टिकोण से, जो कभी-कभी विंडोज के साथ काम करते हैं, लाइन संपादन, इतिहास खोज आदि के लिए बुनियादी EMACS बाइंडिंग जोड़कर।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.