क्या बैश के लिए एक निर्देशिका इतिहास है?


26

क्या बैश का रिवर्स-सर्च-हिस्ट्री (Ctrl-r) जैसा कुछ है, लेकिन केवल निर्देशिकाओं के लिए?

मेरे पास कुछ गहरे फ़ोल्डर पदानुक्रम हैं जिन्हें मैं कूदना चाहता हूं, इसलिए मैं रिवर्स-सर्च-हिस्ट्री जैसे कुछ का उपयोग करना चाहता हूं, लेकिन यह केवल फ़ोल्डर नामों की तलाश करता है और मुझे पूर्ण पथ देता है।

अनिवार्य रूप से, यह उपयोग करने के लिए समान परिणाम देगा, !?लेकिन केवल सामने वाले सीडी के साथ कमांड का मिलान करके , आप परिणामों और पूर्ण पथों के माध्यम से कदम बढ़ा सकते हैं।

अब तक, मैंने जो सबसे अच्छा समाधान पाया है वह है बशमार्क


1
मैंने हाल ही में z का उपयोग करना शुरू किया और यह अब तक काम करता है, लेकिन मैंने इसे कुछ रास्तों के लिए उपयोग किया है।
रोब

जवाबों:


11

ऑटोजंप पर एक नजर :

सबसे अधिक इस्तेमाल किया जाने वाला शेल कमांड "सीडी" है। मेरे दोस्तों के बीच एक त्वरित सर्वेक्षण से पता चला है कि सभी प्रकार के 10 से 20% के बीच वे वास्तव में सीडी कमांड हैं! दुर्भाग्य से, अपने सिस्टम के एक हिस्से से दूसरे में सीडी के साथ कूदने के लिए आपको लगभग पूर्ण पथ दर्ज करने की आवश्यकता होती है, जो बहुत व्यावहारिक नहीं है और इसके लिए बहुत सारे कीस्ट्रोक्स की आवश्यकता होती है।

ऑटोजंप आपके फाइलसिस्टम को नेविगेट करने का एक तेज़ तरीका है। यह उन निर्देशिकाओं के डेटाबेस को बनाए रखने के द्वारा काम करता है जिन्हें आप कमांड लाइन से सबसे अधिक उपयोग करते हैं। जम्पस्टैट कमांड आपको डेटाबेस की वर्तमान सामग्री दिखाती है। डेटाबेस के उपयोग योग्य बनने से पहले आपको थोड़ा काम करने की आवश्यकता है। एक बार जब आपका डेटाबेस यथोचित रूप से पूरा हो जाता है, तो आप टाइप करके आमतौर पर "सीडी" एड डायरेक्टरी में "जंप" कर सकते हैं:
j dirspec


यह टर्मिनल के शीर्षक के साथ मुद्दों को जन्म दे सकता है ।
डैनियल बेक

6

वहाँ है

cd -

यह "सीडी [स्पेस] [हाइफ़न]" कमांड है, जो उस निर्देशिका में जाता है जो आप पहले थे, अनिवार्य रूप से "गहराई का इतिहास"। बार-बार "सीडी -" दो निर्देशिकाओं के बीच आगे-पीछे होता है।

कोटिंग मैन पेज:

निम्नलिखित ऑपरेंड का समर्थन किया जाएगा: [...]

जब एक [हाइफ़न] का उपयोग ऑपरेंड के रूप में किया जाता है, तो यह कमांड के बराबर होगा:

      cd "$OLDPWD" && pwd

दुर्भाग्य से, मुझे एक वास्तविक अंतर्निहित निर्देशिका इतिहास का पता नहीं है।


ऐसी pushd dir popdजोड़ी है जो आपके इतिहास को निर्देशिकाओं के ढेर में संग्रहीत कर सकती है। यह उन लिपियों में वास्तव में सहायक है जो विभिन्न फ़ोल्डरों में काम करते हैं।
जकूज़ी

मैं के बारे में पता pushdहै और popd, और यह भी पहले से ही यहाँ उल्लेख किया है।
apurkrt

3

बैश में पुशड / पोप / डायर हैं। मैं इसे अपने .bashrc में bash के स्टैक पर ऑटो-पुश डायरेक्ट्रीज़ के लिए रखता हूँ।

#let cd also pushd directories into stack. Use popd to reverse stack
function cd ()
{
  if [ -e $1 ]; then 
    pushd $1 &> /dev/null   #dont display current stack 
  fi
}

इनका उपयोग करके पॉप करें popdऔर स्टैक का उपयोग करके प्रदर्शित करेंdirs


2

मुझे जेड-जंप के साथ अच्छा अनुभव था , यह पूरा होने की अनुमति देता है, हालांकि केवल अंतिम गंतव्य के लिए, एक पथ के माध्यम से कदम नहीं। हालांकि यह टैब पूरा होने पर पूरा रास्ता दिखाता है।


1

बस अपने स्वयं के अनुभव के साथ झंकार करने के लिए, मैंने कुछ समय पहले इस आवश्यकता को संबोधित करने के लिए एक सरल स्क्रिप्ट लिखी थी, यह एक साधारण फ़ंक्शन के साथ अंतर्निहित सीडी कमांड को अधिलेखित करता है जो नई निर्देशिका स्थान को एक इतिहास फ़ाइल में जोड़ता है, फिर एक पायथन स्क्रिप्ट का उपयोग किया जाता है बैश इंटरफ़ेस प्रदान करें जो डायनामिक रूप से निर्देशिकाओं की एक क्रमबद्ध सूची को अपडेट करता है जैसे ही आप खोज शब्द दर्ज करते हैं, कुछ हद तक बैश के रिवर्स कमांड सर्च की तरह।

यह उत्सुक लोगों के लिए git-hub पर उपलब्ध है ।


गायरॉइड पर रॉक
डार्थ

1

मैं ltcdनिर्देशिका इतिहास के माध्यम से त्वरित नेविगेशन के लिए अपनी सिफारिश करना चाहता हूं :

https://github.com/dczhu/ltcd

सीडी डेमो gif

यह जीवन को आसान बनाने के लिए निम्नलिखित सुविधाएँ प्रदान करता है:

  • वैश्विक dir लिस्टिंग, जो हाल ही में सभी टर्मिनल टैब / विंडो से dirs को दिखाती है।
  • स्थानीय dir लिस्टिंग, जो वर्तमान शेल सत्र के लिए स्थानीय है।
  • दोनों लिस्टिंग j / k (नीचे जाएं / ऊपर), संख्याओं और शब्द खोज का उपयोग करके त्वरित नेविगेशन का समर्थन करती हैं।
  • ग्लोबल फ्री जंपिंग (उदाहरण के लिए "cd dir" या "cd ar" / to / path / to / foo / bar / directory / a)।

1

मैंने एक स्क्रिप्ट बनाई है जिसमें ओह-माय-ज़श कीdirs -v कमांड के समान कार्यक्षमता है जो बैश पर काम करती है। यदि आपने कभी भी ओह-माय-ज़श का उपयोग किया है , तो आपने देखा होगा कि कमांड द्वारा प्रदान की जाने वाली निर्देशिका इतिहास dirs -vहर बार टर्मिनल से बाहर निकलने पर रीसेट हो जाएगी। यदि आप इस स्क्रिप्ट का उपयोग करते हैं , तो ऐसा नहीं होगा ।

कार्यक्षमता:

  • 10 सबसे हाल ही में प्रयुक्त निर्देशिका की सूची दिखाएं d

  • सूची में निर्देशिका की संख्या लिखकर सूची में किसी भी निर्देशिका पर जाएं। 10 वीं निर्देशिका में कूदने के लिए आपको 10 के बजाय 0 का उपयोग करने की आवश्यकता है।

  • एक निर्देशिका पथ सूची के शीर्ष पर हर बार जब आप का उपयोग किया जाएगा v( vim फ़ाइलों को संपादित करने के लिए) या o( XDG से खोलने ) कि निर्देशिका से एक फ़ाइल को खोलने के लिए। या यदि आपको पसंद है, तो हर बार जब आप एक निर्देशिका का दौरा करते हैं।

आप इसे यहां कार्रवाई में देख सकते हैं ।


0

ठीक है, आप इस कोड स्निपेट को अपने साथ जोड़ सकते हैं ~/.bashrc, जो

  1. एक कस्टम सीडी कमांड प्रदान करता है

        function cd ()
        {
            exists=false
            for dir in "${CDHIST[@]}"; do
                [ "$dir" == "$1" ] && {
                    exists == true
                    break
                }
            done
    
            $exists || {
                len=${#CDHIST[@]}
                ${CDHIST[$len]} = "$1"
            }
    
            builtin cd "$1"
        }
  2. और एक सीडी इतिहास खोज आदेश प्रदान करता है।

    function cdhist ()
    {
        #TODO: Make this magical.
    
        for dir in "${CDHIST[@]}"; do
            echo "$dir"
        done
    }

बेशक, मैंने जो cdhist कमांड प्रदान की है वह बहुत ही बुनियादी है, और न कि आप जो चाहते थे; लेकिन जैसा आप चाहते हैं, वैसा ही कुछ हासिल करने के लिए केस स्टेटमेंट या पैरामीटर विस्तार का उपयोग करना बोधगम्य है।

आप कुछ "प्रोग्रामेबल पूर्णता" फ़ंक्शन भी जोड़ सकते हैं, जिसका उपयोग cd /path/to/mydirएक अद्वितीय उप-स्ट्रिंग के आधार पर पूर्ण कमांड को जोड़ने के लिए किया जा सकता है /path/to/unique/mydir, हालांकि उस विधि को अभी भी आपको टाइप करने की आवश्यकता होगी cd unique/mydir<tab>


1
मैंने आपके कोड को गलत बताया और बैश dirsकमांड को पाया जो अनिवार्य रूप से एक ही चीज़ के रूप में करता है my_dirs, लेकिन एक लाइन पर।
idbrii

1
ठंडा। तो न केवल बैश इसका समर्थन करता है; यह इसे लागू करता है। काश मेरे पास बैश के गहरे जादू का अध्ययन करने के लिए अधिक समय होता। बेशक, यह केवल याद रखने वाले पुशड का समर्थन करता है, सीडी का नहीं। लेकिन मुझे लगता alias cd=pushdहै कि सबसे सुंदर रूप होगा।
jpaugh

0

आप अपनी खुद की निर्माण कर सकते हैं cdके साथ आदेश pushd, popd, dirs builtin आदेशों।

प्रयोग

  • cd -- (सूची वर्तमान इतिहास)

  • cd -num (संख्या निर्देशिका पर जाएं)

  • cd - (पिछली निर्देशिका पर जाएं)


function cd()
{
    local hnum=16  # number of entries
    local new_dir index dir cnt
    if ! [ $# -eq 0 ]; then
        if [[ $# -eq 2 && $1 = "--" ]]; then
            shift
        else 
            if ! { [ $# -eq 1 ] && [[ $1 =~ ^(-[0-9]{,2}|-|--|[^-].*)$ ]] ;}
            then
                builtin cd "$@"
                return
            fi
        fi
    fi
    [ "$1" = "--" ] && { dirs -v;  return ;}
    new_dir=${1:-$HOME}
    if [[ "$new_dir" =~ ^(-[0-9]{,2}|-)$ ]]; then
        index=${new_dir:1}
        [ -z "$index" ] && index=1
        new_dir=$(dirs -l +$index) || return
    fi
    pushd -- "$new_dir" > /dev/null || return
    popd -n +$hnum &> /dev/null
    new_dir=$PWD cnt=1
    while dir=$(dirs -l +$cnt 2> /dev/null); do
        if [ "$dir" = "$new_dir" ]; then
            popd -n +$cnt > /dev/null
            continue
        fi
        let cnt++
    done
}

export -f cd

-1

मैंने इस उपकरण को एक साथ रखा, जो एक व्यापक वैश्विक सीएलआई इतिहास को संरेखित करने के लिए एक इंटरेक्टिव ग्रीपिंग टूल के साथ पिछले समाधान को जोड़ता है जिसे पेरकोल (मैप्ड टू सी ^ आर) कहा जाता है। मैं इसका उपयोग उन कमांड्स को पुनः प्राप्त करने के लिए करता हूं जहां वे चलाए गए थे या एक कमांड द्वारा डायरेक्टरी ढूंढने के लिए। यह अभी भी पहली मशीन है जिस पर मैंने इसका उपयोग करना शुरू कर दिया है, अब> 2 वर्ष पुराने CLI इतिहास के साथ।

Grep टूल पथ और कमांड दोनों पर काम करता है, लेकिन फिर भी आपके लिए उपयोगी हो सकता है। Zsh में 'dirs -v' भी देखें

https://github.com/gawells/ariadne


यह पथ, कमांड और दिनांक के साथ एक CLI इतिहास संग्रहीत करता है। यह पथ-केवल नहीं है, लेकिन फिर भी रिवर्स खोज के लिए उपयोगी है dir इतिहास (bash और zsh)
गॉर्डन वेल्स

मुझे लगता है कि आप अपने टूल से लिंक करना भूल गए हैं। आपके विवरण से, मुझे संदेह है कि यह उस आदेश में कमी है जहां से वे काम करते हैं। तो cd share/manकेवल तभी काम करता है जब मैं पहले से ही / usr में हूं।
idbrii

उफ़! मेरा बुरा है, मैंने सोचा कि मैं पाठ में यूआरएल डालूंगा, कुछ गलत नहीं देखा
गॉर्डन वेल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.