मैं 'cd' कमांड को होम डायरेक्टरी में जाने से कैसे रोकूँ?


10

बात यह है कि कभी-कभी मैं cdगलती से टाइप करता हूं और मुझे होम डायरेक्टरी में ले जाता है।

जैसे मैं एक निर्देशिका में हूं जिसमें एक छिपी निर्देशिका और एक दृश्य निर्देशिका है, मैं जल्दी से cd+ दबाता हूं tabऔर यह मुझे होम निर्देशिका में ले जाता है


30
यदि आप cdकहीं दुर्घटना से हैं, तो cd -अपने पिछले स्थान पर लौटने के लिए उपयोग करें - बैश $OLDPWDइस उद्देश्य के लिए चर रखता है । देखें gnu.org/software/bash/manual/bash.html#index-cd
ग्लेन जैकमैन

4
यदि आप वास्तव में cdकुछ नहीं करना चाहते हैं , तो आप एक फ़ंक्शन लिख सकते हैं जिसका नाम cdकुछ नहीं है जब कोई तर्क नहीं दिया जाता है, अन्यथा कॉल करेंbuiltin cd "$@"
ग्लेन जैकमैन

2
वास्तव में बुरा विचार: गृह =।
यहोशू

26
मेरी ईमानदारी से सबसे अच्छी सिफारिश है कि आप इसे निष्पादित करने से पहले कमांड को जांचना और धीमा करना सीखें। दूसरे शब्दों में: cdजो कुछ भी करता है उसे करने की आदत डालें। यदि आप उन कमांड्स को निष्पादित करने की आदत रखते हैं जिन्हें आपने चेक नहीं किया है, तो आप बाद में बहुत बड़ी परेशानियों में पड़ जाएंगे। उदाहरण के लिए, आप दो फ़ाइलों को एक तीसरी निर्देशिका में ले जाना चाहते हैं: mv a b dir/और TAB पूरा होने पर dirआपकी अपेक्षा के अनुरूप उत्पादन नहीं होता है, आप mv a bओवरराइटिंग को अंजाम देंगे b। सावधान रहना सीखें, Enter दबाने से पहले कमांड देख लेना सीखें।
२०

1
@Joe मैं के लिए एक आवरण पटकथा लिखी rmजैसे शीर्ष स्तर की निर्देशिकाओं के हटाने को रोकने के लिए /, /etc, /usr, /home, /varएक पासवर्ड ओवरराइड के बिना, आदि। कभी-कभी हमें खुद से सुरक्षा की आवश्यकता होती है :)
WinEunuuchs2Unix

जवाबों:


14

gedit ~/.bashrcनीचे इन पंक्तियों का उपयोग करें और डालें:

cd() {
    [[ $# -eq 0 ]] && return
    builtin cd "$@"
}

एक नया टर्मिनल खोलें और अब जब आप cdकोई मापदंडों के साथ टाइप करते हैं तो आप बस उसी निर्देशिका में रहते हैं।


टी एल; डॉ

यदि आप वास्तव में विस्तृत होना चाहते हैं, तो जब आप कोई पैरामीटर पारित नहीं करते हैं, तो आप मदद स्क्रीन में डाल सकते हैं:

$ cd

cd: missing operand

Usage:

    cd ~            Change to home directory. Equivelent to 'cd /home/$USER'

    cd -            Change to previous directory before last 'cd' command

    cd ..           Move up one directory level

    cd ../..        Move up two directory levels

    cd ../sibling   Move up one directory level and change to sibling directory

    cd /path/to/    Change to specific directory '/path/to/' eg '/var/log'

इसे पूरा करने के लिए विस्तारित कोड है:

cd() {
    if [[ $# -eq 0 ]] ; then
        cat << 'EOF'

cd: missing operand

Usage:

    cd ~            Change to home directory. Equivelent to 'cd /home/$USER'

    cd -            Change to previous directory before last 'cd' command

    cd ..           Move up one directory level

    cd ../..        Move up two directory levels

    cd ../sibling   Move up one directory level and change to sibling directory

    cd /path/to/    Change to specific directory '/path/to/' eg '/var/log'

EOF
        return
    fi

    builtin cd "$@"
}

6
लेकिन तब आपने अपने पर्यावरण को अन्य पर्यावरण की तरह काम किया है। फ़ंक्शन को क्यों नहीं बुलाया ncd("न्यू सीडी" के लिए), और वास्तविक को cdअकेला छोड़ दें ?
वाल्टिनेटर

@waltinator मैं इस चेतावनी के साथ उत्तर को बेहतर बना सकता हूं कि कैसे cd (रिक्त) लोगों के लिए घर के उपयोगकर्ता के अलावा अलग तरह से काम करता है ~/.bashrc। आप एक उदाहरण दे सकते हैं या दो के लिए क्या देखना है? उदाहरण के लिए एक डेवलपर cd अपनी स्थापना स्क्रिप्ट में (रिक्त) का उपयोग करता है । (हाइपोथेटिकल लेकिन मैं एक केस के बारे में नहीं सोच सकता)। मैं आपके उदाहरणों को उत्तर में रोल कर सकता हूं और सुझाव दे सकता हूं कि ओपी का उपयोग ncdकरने के बजाय हर समय उपयोग करें cd
WinEunuuchs2Unix

मुझे चीजों को कस्टमाइज़ करना बहुत पसंद है। यह लिनक्स के बारे में क्या है। लेकिन मेरे पास एक सख्त व्यक्तिगत नियम है जो किसी भी सामान्य आदेशों के फ़ंक्शन (कोई सज़ा का इरादा नहीं) को बदलने के लिए नहीं है। जब आप किसी अन्य सिस्टम पर काम करते हैं या जब कोई दूसरा काम करता है या आप पर सलाह देता है तो यह समस्याएँ खोलता है। मैं और कहा कि अन्य "अच्छा" जो @waltinator से सहमत
जो

6

यदि यह टैब पूरा हो रहा है, जिससे यह हो रहा है, तो एक विकल्प यह है कि प्रविष्टियों के माध्यम से तुरंत पूरा होने वाला चक्र बनाया जाए। यह डिफ़ॉल्ट के बजाय रीडलाइन केmenu-comple विकल्प का उपयोग करके किया जा सकता है complete:

bind 'tab: menu-completion'

फिर, मेरे घर निर्देशिका में, उदाहरण के लिए:

$ cd <tab> # becomes
$ cd .Trash

बेशक, तब भी आपको वही पढ़ना होगा जो आप निष्पादित कर रहे हैं।


4

यहां बताया गया है कि मैंने अपनी खिड़कियों के शीर्षक में वर्तमान डायर और उपयोगकर्ता को कैसे रखा - आप इसे अपनी आवश्यकता के अनुसार अनुकूलित कर सकते हैं, लेकिन cd -, cd $OLDPWDएक बेहतर समाधान है।

मेरी ओर से ~/.bashrc:

# from the "xttitle(1)" man page - put info in window title
update_title()
{
    [[ $TERM = xterm ]] || [[ $TERM = xterm-color ]]  && xttitle "[$$] ${USER}@${HOSTNAME}:$PWD"
}

cd()
{
    [[ -z "$*" ]] && builtin cd $HOME
    [[ -n "$*" ]] && builtin cd "$*"
    update_title
}

4

यहाँ समस्या यह नहीं है cd, और यह प्रौद्योगिकी द्वारा तय नहीं है।

समस्या आप है, और यह धैर्य द्वारा तय किया गया है!

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

आप पाएंगे कि यह दृष्टिकोण न केवल समस्या को हल करता है, बल्कि अन्य दूरगामी समस्याओं का भी सामना करता है, अगर आप अपने मौजूदा रास्ते को जारी रखते हैं।


2
इसके अलावा, कुछ महीनों / वर्षों के उपयोग के बाद आप इस बारे में भूल जाएंगे कि आपने व्यवहार को बदल दिया है और अन्य वातावरणों में काम करने के लिए समस्याएं होंगी।
pLumo

@RoVo भी, अच्छी बात है!
ऑर्बिट

@RoVo कुछ ही दिनों में हो सकता है। सही होने पर, यदि आप ड्यूल बूट करते हैं, तो VM पर स्विच करें ...
जो

@ जो लेली मैं दिन में ओएसएक्स और शाम को विंडोज के बीच स्विच कर रहा हूं और कीबोर्ड लेआउट परिवर्तन वास्तव में भ्रामक है!
ऑर्बिट

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