बैश के लिए "बुकमार्क"


24

नेस्टेड निर्देशिकाओं की कई परतों को नेविगेट करना अक्सर एक दर्द होता है। फ़ायरफ़ॉक्स पर, यह आसान है क्योंकि उनके पास बुकमार्क हैं। तो मैं एक फ़ाइल टाइप करने के लिए बुकमार्क करना क्या चाहूँगा:

$ go --add classes "repo/www/public/util/classes"

फिर, इस निर्देशिका में जाने के लिए, मुझे टाइप करना होगा:

$ go classes

पहले मैंने कुछ समान हासिल करने के लिए प्रतीकात्मक लिंक का उपयोग किया है, लेकिन मैं अपने घर निर्देशिका को अव्यवस्थित नहीं करना चाहता। कई अन्य विशेषताएं हैं जो उपयोगी साबित हो सकती हैं। उदाहरण के लिए, मैं टाइप करना शुरू करने में सक्षम होना चाहूंगा go clऔर फिर टैब को स्वतः पूर्ण करना चाहूंगा । कभी-कभी मेरे पास एक रिपॉजिटरी की कई प्रतियां होती हैं, और इसलिए यह प्रोग्राम के लिए उपयोगी होगा कि वह मुझे कई संदर्भों को बनाने और संदर्भ आधार निर्देशिका के सापेक्ष बुकमार्क सेट करने की अनुमति दे।

इसलिए, इससे पहले कि मैं स्क्रिप्ट के अपने सेट को एक साथ सिलना शुरू कर दूं, क्या पहले से ही ऐसा कुछ है?



4
यदि आप बैश की तुलना फ़ायरफ़ॉक्स से करते हैं, तो कोई व्यक्ति बैश के लिए
कमाल करेगा

जवाबों:


12

मैं बहुत लंबे समय के लिए कुछ शेल-बुकमार्किंग टूल की तलाश में था, और मुझे मिले किसी भी समाधान से संतुष्ट नहीं हूं।

हालांकि, आखिरकार मैं एक महान, सार्वभौमिक उपकरण भर आया हूं: कमांड-लाइन फजी फाइंडर

यह मुख्य रूप से आपको "फ़ज़ी-फाइंड" फाइल्स (ऊपर दिए गए लिंक द्वारा रिच जिफ़ एनीमेशन की जाँच करें) की अनुमति देता है, लेकिन यह मनमाने ढंग से टेक्स्ट डेटा को फीड करने और इस डेटा को फ़िल्टर करने की भी अनुमति देता है। तो, शॉर्टकट आइडिया सरल है: हम सभी को पथ (जो शॉर्टकट हैं) के साथ एक फ़ाइल बनाए रखने की आवश्यकता है, और इस फ़ाइल को फ़ज़ी-फ़िल्टर करें। यहां बताया गया है कि यह कैसा दिखता है: हम cdgकमांड टाइप करते हैं ("सीडी ग्लोबल" से, यदि आपको पसंद है), हमारे बुकमार्क की एक सूची प्राप्त करें, बस कुछ कीस्ट्रोक्स में आवश्यक एक को चुनें, और एंटर दबाएं। कार्यशील निर्देशिका को चुने गए आइटम में बदल दिया गया है:

CDG

यह बहुत तेज़ और सुविधाजनक है: आमतौर पर मैं केवल आवश्यक वस्तु के 3-4 अक्षर टाइप करता हूं, और अन्य सभी पहले से ही फ़िल्टर किए जाते हैं। साथ ही, निश्चित रूप से हम के माध्यम से सूची तीर कुंजियों के साथ या के साथ स्थानांतरित कर सकते हैं Ctrl+j/ Ctrl+k

इस शॉर्टकट / बुकमार्क समाधान के बारे में विस्तृत लेख यहाँ है: आपके शेल के लिए फजी शॉर्टकट


19

मुझे लगता है कि आप ऑटोजंप जैसी किसी चीज की तलाश कर रहे हैं । आपको "कुंजी वज़न" का एक सेट विकसित करने के लिए थोड़ा सा चारों ओर cd करना होगा जो किसी दिए गए निर्देशिका में खर्च किए गए समय की राशि के साथ सहसंबंधित है। फिर, यह मानते हुए कि आपने उस 'कक्षाओं' में बहुत समय बिताया, आप सीधे टाइप करके वहां जा सकते हैं

j cl

आप अपने "कुंजी वज़न" के साथ देख सकते हैं

jumpstat

मैंने हाल ही में थोड़ा और अधिक जटिल, लेकिन दिलचस्प और संबंधित पाया, जिसे टूल कहा गया f: github.com/clvv/f
tcdyl

14

सईद का उल्लेख है, उपनाम एक अच्छा तंत्र है। बैश शेल में एक स्थान पर सही कूदने के लिए एक अंतर्निहित तंत्र भी है CDPATH:। इसे सेट करें PATH, लेकिन इसका उपयोग cdकार्यक्रमों की खोज के बजाय किया जाता है ।

$ CDPATH=:~/repo/www/public/util
$ cd classes
/home/casebash/repo/www/public/util/classes

मैनपेज से:

   CDPATH The search path for the cd command.  This is  a  colon-separated
          list  of  directories  in  which the shell looks for destination
          directories specified by the cd  command.   A  sample  value  is
          ".:~:/usr".

अपने आप से, मैंने इसे एक निर्देशिका के साथ जोड़ दिया है, जहाँ मैं जाना चाहता हूँ, के लिए सहानुभूति है:

$ mkdir ~/cdshortcut
$ ln -s ~/repo/www/public/util/classes ~/cdshortcut/classes
$ CDPATH=:~/cdshortcut
/home/casebash/cdshortcut/classes

इसका दोष यह है कि निर्देशिका सही प्रतीत नहीं होती है, लेकिन इसका उपयोग cd -Pया सेटिंग को ठीक किया जा सकता है set -P


CDPATH दिलचस्प है, लेकिन यह शायद एक अलग गो कमांड का उपयोग करने के लायक है, ताकि व्यवहार हमेशा पूर्वानुमान योग्य हो
Casebash

1
सेट के लिए +1। मेरी कुछ सहानुभूति मुझे पागल कर रही थी क्योंकि मुझे याद नहीं था कि वे वास्तव में कहाँ गए थे और उस जानकारी को दिखाने वाले कमांड को याद नहीं किया।
जो

@ हाँ, मैं इसके alias C='cd -P .'बजाय जोड़ दूंगा, set -Pक्योंकि सिस्टम सिम्बलिंक्स के लिए मुझे सहिष्णु निर्देशिका में होने का कोई मतलब नहीं है।
वाइल्डकार्ड

@Wildcard - रोचक - क्या आप एक उदाहरण दे सकते हैं जहां यह आपके लिए एक अंतर है? मैं अभी भाग गया help cdऔर अभी भी समझ में नहीं आ रहा है कि पी-ऑप्शन क्या करता है।
जो

@ जोmkdir test; ln -s test linktotest; cd linktotest; pwd; cd -P .; pwd
वाइल्डकार्ड

9

आप बैश के मौजूदा इतिहास और इतिहास खोज सुविधाओं को जोड़ सकते हैं। Ctrl-Rवृद्धिशील रिवर्स खोज शुरू करने के लिए दबाएं , फिर सबसे अनोखा होने के लिए पथ के हिस्से को टाइप करना शुरू करें।

जब तक आप cdउस निर्देशिका से जुड़े सबसे हाल के कमांड पर वापस टाइप नहीं करते, तब तक आप टाइपिंग पत्र रख सकते हैं , या आप Ctrl-Rइतिहास में वापस कूदने के लिए फिर से दबा सकते हैं कि आपने अब तक क्या टाइप किया है।

मेरे द्वारा हमेशा ऐसा ही किया जाता है।

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

उदाहरण के लिए, यहां मैं विकास के दौरान अपने एक कार्यक्रम का निर्माण और संचालन कर रहा हूं:

$ ( cd .. ; make install ) && ./start_my_program

मैं इसे स्थापित निर्देशिका से करता हूं, जो शीर्ष-स्तरीय स्रोत निर्देशिका के नीचे है। cdएक उप-शेल में भाग को लपेटने , बनाने और स्थापित करने से, मैं यह सुनिश्चित करता हूं कि इस प्रक्रिया के दौरान कोई फर्क नहीं पड़ता, मैं अपने सामान्य शेल में वापस बदल देता हूं, जिसमें कुछ भी नहीं बदला है। केवल तभी जो सफल होता है (और&) क्या मैं बनाया और स्थापित प्रोग्राम शुरू करता हूं। मैं इसे अपने इतिहास में सिर्फ एक Ctrl-Rसमय के साथ पा सकता हूं sta, यह सब होने के नाते मुझे आमतौर पर विशिष्ट रूप से इस कमांड अनुक्रम को खोजने की आवश्यकता है।

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

के साथ इस सब कम्बाइन export HISTSIZE=bignumऔर shopt histappendऔर तुम सिर्फ एक हाथी का आदेश स्मृति का निर्माण किया है।

एक अन्य समाधान मैं एक बार ऊपर कोडित में है मेरा उत्तर करने के लिए एक और सवाल यहाँ । इसे आपके उद्देश्यों के लिए अनुकूलित किया जा सकता है, और यह केवल cdकमांड को संभालता है , जबकि इतिहास खोज विकल्प हर जगह और हर कमांड के लिए काम करता है।


6

मैं स्वयं aliasलंबे रास्तों को छोटा करने के लिए उपयोग करता हूं जो मैं अक्सर आता हूं। आप अपने aliases के सेट को अपने अंदर रख सकते हैं bashrc, इसलिए बैश उन्हें हर बार लॉगिन करने के दौरान याद रख सकते हैं। और सौभाग्य से बैश एलियट को ऑटो से पूरा करता है।

मैं आपके मामले के लिए कुछ इस तरह लिखूंगा: alias go-classes="cd ~/repo/www/public/util/classes"


6

आप बशमार्क ( गिथब पर) खोज रहे होंगे
README से:

बशमार्क एक शेल स्क्रिप्ट है जो आपको आमतौर पर उपयोग की जाने वाली निर्देशिकाओं को सहेजने और कूदने की अनुमति देता है। अब टैब पूरा करने का समर्थन करता है।


4

यह किसी भी तरह से पूर्ण नहीं है और न ही मूर्खतापूर्ण है, बस एक मसौदा शुरू करना है। निम्नलिखित को अपने में जोड़कर आपके ~/.bashrcपास डिलीट और लिस्ट डायरेक्टरी बुकमार्क को जोड़ने के लिए तीन कमांड होंगे (जो शेल उपनामों पर आधारित हैं, इसलिए आप ऑटो-पूर्ण होने की तरह भी हैं)।

BMFILE=~/.bash.bookmarks
[ -f "$BMFILE" ] && . "$BMFILE"

bmadd() {
    local abm
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    abm="alias $bm='cd \"$(pwd)\"'"

    if grep -q " $bm=" "$BMFILE"; then
        echo "Overwriting existing bookmark $bm"
        bmdel "$bm"
    fi
    echo "$abm" >> "$BMFILE"
    eval "$abm"
    #source "$BMFILE"
}

bmdel() {
    local bms
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    #sed -i.bak "/ $bm=/d" "$BMFILE"
    bms=$(grep -v " $bm=" "$BMFILE")
    echo "$bms" > "$BMFILE"
    unalias "$bm" 2> /dev/null
}

bmlist() {
    sed 's/alias \(.*\)=.cd "\(.*\)".$/\1\t\2/' "$BMFILE" | sort
}

उपयोग बहुत सरल है। bmaddएक तर्क के साथ तर्क के नाम पर एक उपनाम जोड़ता है। यह उपनाम केवल उस निर्देशिका में cd बनाता है जिसे इसमें सेट किया गया था। एक तर्क के बिना यह उपनाम के रूप में वर्तमान dirname का उपयोग करता है। उसी तरह, bmdelयदि मौजूद है और bmlistसूची को सूचीबद्ध करता है, तो एक उपनाम हटा देता है ।

जैसे

u@h:~ $ cd /usr/share/doc
u@h:/usr/share/doc $ bmadd
u@h:/usr/share/doc $ cd /usr/local/share/
u@h:/usr/local/share $ bmadd lshare
u@h:/usr/local/share $ cd
u@h:~ $ bmlist
doc     /usr/share/doc
lshare  /usr/local/share
u@h:~ $ doc
u@h:/usr/share/doc $ bmdel lshare
u@h:/usr/share/doc $ bmlist
doc     /usr/share/doc
u@h:/usr/share/doc $

4

मैं कुछ समय पहले उसी जरूरत पर आया था और मुझे संपूर्ण / सापेक्ष रास्तों को बुकमार्क करने में मदद करने के लिए स्क्रिप्ट का एक साथ रखने का फैसला किया और उन्हें छोटे नामों के लिए मैप किया जिन्हें मैं आसानी से याद रख सकता हूं।

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

यहाँ बुकमार्क स्क्रिप्ट के स्रोत का लिंक दिया गया है । वैसे, मैंने इसका नाम द बुकमार्क रखा है।

प्रयोग

एक बार स्थापित यह उपयोग करने के लिए बहुत तुच्छ है।

एक निर्देशिका को चिह्नित करने के लिए:

$ mark /this/is/a/very/very/looooong/path mydir

एक चिह्नित क्षेत्र में नेविगेट करने के लिए:

$ mydir

यह देखने के लिए कि क्या चिह्नित किया गया है:

$ marks
bin     -> /Users/khafaji/bin
eBooks  -> /Users/khafaji/eBooks

चिह्नित निर्देशिका को हटाने के लिए:

$ umark myDir

आगे के उदाहरणों के लिए, इंस्टॉलेशन निर्देश आदि बहुत विस्तृत दस्तावेज देखें


3

cdargs निर्देशिका बुकमार्क करने के लिए सबसे अच्छा उपकरण है।

उपयोग के उदाहरणों के लिए YouTube पर cd कमांड वीडियो के बुकमार्क देखें।

उदाहरण उपयोग

cdargsएक नर्स GUI है ताकि आप नेत्रहीन अपने खोल के भीतर नेविगेट कर सकें। एक बार स्थापित होने के बाद आप इसे एक शेल स्क्रिप्ट की सोर्सिंग द्वारा दिए गए खोल में सेट करते हैं:

$ source /etc/profile.d/cdargs.sh

यह कई कार्यों को सक्षम करता है जिन्हें आप अपने शेल से कॉल कर सकते हैं।

GUI को समन करें:

$ cv

इस प्रकार के GUI में परिणाम:

   [.       ]  /home/saml/tst/88040
 0 [path0   ]  /home/saml/tst/88040/path0
 1 [path1   ]  /home/saml/tst/88040/path1
 2 [path2   ]  /home/saml/tst/88040/path2

आप सूची को नेविगेट करने के लिए ऊपर और नीचे जाने के लिए अपने तीर कुंजियों का उपयोग कर सकते हैं। बायाँ तीर ( ) डायरेक्टरी ट्री में एक स्तर ऊपर चला जाता है, एक राइट एरो ( ) एक डाइरेक्टरी में ड्रिल हो जाएगा।

अंकन निर्देशिकाएं:

आप या तो cनेविगेट aकर रहे वर्तमान निर्देशिका के लिए उपयोग कर सकते हैं या आप उस निर्देशिका को जोड़ने के लिए उपयोग कर सकते हैं जिसे आप वर्तमान में कर्सर के साथ हाइलाइट कर रहे हैं।

ऑपरेशन मोड:

cdargsइस संबंध में vi / vim की तरह एक छोटा सा स्थान है जहां यह मोड की धारणा है । उनमें से 2 हैं, ब्राउज़िंग (बी) और लिस्टिंग (एल)। आप देख सकते हैं कि आप अपने शेल के निचले भाग में किस मोड में हैं।

लिस्टिंग मोड:

L: /home/saml/tst/88038

ब्राउजिंग मोड:

B: /home/saml/tst/88038

टैब की ( TAB) को मारकर आप अपने मोड को बदल सकते हैं ।

यह सिर्फ हिमशैल का टिप है, मैन पेज ( man cdargs) और अधिक जानकारी के लिए अंतर्निहित सहायता से परामर्श करें।


2

इसके लिए सबसे अच्छा साधन है: wcd । मैंने कई अन्य उपकरणों का परीक्षण किया है, और यह एक बिल्कुल उसी तरह से उपयोग किया जाता है जिस तरह से आप पूछ रहे हैं और यह पिछले सभी समाधानों की तुलना में कई अर्थों में बेहतर है।


1

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

AutoKey की जाँच करें। यह एक शब्द संसाधक ऑटोक्रॉरेक्ट या बैश हिस्ट्री जैसे वाक्यांशों को स्थानापन्न कर सकता है और यह आपके द्वारा परिभाषित हॉटकी पर एक पाइथन स्क्रिप्ट भी चला सकता है जो लगभग कुछ भी कर सकता है और कीस्ट्रोक्स को आपके चरित्र इनपुट डिवाइस पर भी भेज सकता है - जैसे कि आपने उन्हें देखा है।

एकमात्र "कमी" है (इस प्रश्न के संबंध में) यह है कि इसे चलाने के लिए एक सूक्ति की जरूरत है - सूक्ति या केडी। अन्य उत्तरों में इसकी आवश्यकता नहीं है।

https://code.google.com/p/autokey/

1

Z नामक एक अन्य विकल्प है ।

यह हर निर्देशिका परिवर्तन पर सीखता है:

$ cd /tmp/
$ pwd
/tmp
$ cd
$ pwd
/home/user

फिर आप उस निर्देशिका को बाद में फजी मिलान के साथ बदल सकते हैं:

$ z mp
$ pwd
/tmp

1

Apparix ऐसा करने वाला एक और टूल है। इसकी एक उपयोगी विशेषता यह है कि आप उन उप-निर्देशिकाओं पर सीधे निशान और उप-पूर्णताओं के उपनिर्देशिका में कूद सकते हैं।


0

एक और उपाय, जो मेरा मानना ​​है, है autojumpऔर zहै fasd

यह इस बात पर नज़र रखता है कि आप किन निर्देशिकाओं का दौरा करते हैं और z dir-nameउस निर्देशिका को उस नाम के साथ बदल देंगे dir-nameजिसका आप अक्सर उपयोग करते हैं। यह भी अक्सर इस्तेमाल की गई फ़ाइलों के लिए कुछ कार्यक्षमता है।

आप इससे क्लोन कर सकते हैं: https://github.com/clvv/fasd

स्थापित करना सीधे-आगे, क्लोन, स्थापित करना, और फिर अपने .bashrc(या .zshrcआदि) को संशोधित करना है ।


0

आपको अपने .bashrcया किसी अन्य को जोड़ने की आवश्यकता है .bash_profile

## navigate to your home directory
$ cd ~
## list the contents of your home directory to see if you have `.bashrc` or `.bash_profile`
$ ls -a 
[`.bashrc` or `.bash_profile` should appear in the list]
## launch the text editor of your choice; I'll use vim here
## if no `~/.bashrc` or `~/.bash_profile`...
$ vim
## if, e.g., `~/.bash_profile` listed...
$ vim ~/.bash_profile

अब, मान लें कि आप एक शॉर्टकट चाहते हैं ~/Desktop/Coding/Projects, जिसे आप टाइप करेंगे goto_Projs। आपको पाठ संपादक में फ़ाइल में निम्नलिखित पंक्ति जोड़ने की आवश्यकता है:

alias goto_Projs='cd ~/Desktop/Coding/Projects'

अब जो भी आपके पाठ संपादक आप (करने के लिए बचाने के लिए करना चाहता है कर /User/<yourusername>/या ~/निश्चित रूप से) और बाहर निकलें, और सुरक्षा प्रॉम्प्ट जाने दिया जाता है जब

source ~/.bash_profile

आपका उपनाम अब ऊपर वर्णित के रूप में आमंत्रित करने के लिए उपलब्ध होना चाहिए।


0

मैं कमांड के अंत में एक टिप्पणी लागू ctrl Rकरने की विधि का उपयोग करता हूं और फिर टिप्पणी के लिए रिवर्स खोज करने के लिए आह्वान करता हूं । इसके निम्नलिखित फायदे हैं:

  • प्राकृतिक भाषा में एक कमांड की खोज करें
  • मक्खी पर किसी भी समय टिप्पणी बदलें और से नवीनतम अद्यतन प्राप्त करें ctrl R
  • आदेश को मामूली रूप से मोड़ने के लिए उपयोग ctrl Rऔर tabमक्खी पर, इस प्रकार टिप्पणी को समान कमांड के परिवार के लिए एक सामान्य शॉर्टकट बनाते हैं
  • कोई सेटअप, इंस्टाल या बुक की आवश्यकता नहीं है :-)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.