मैं सीडी और एलएस के लिए एक उपनाम कैसे बना सकता हूं?


32

मैं lsकमांड चलाने के बाद अक्सर कमांड चलाता हूं cd। मैं csइस ऑपरेशन के लिए एक उपनाम (जैसे ) कैसे बना सकता हूं ?

जवाबों:


35

से बैश टिप्स और ट्रिक्स: शैली के साथ 'सीडी' :

अंत में, मैं आपको दिखाना चाहता हूं कि 'सीडी' कमांड के लिए अपने स्वयं के कस्टम प्रतिस्थापन को कैसे लिखना है।

क्या आप खुद को हमेशा एक निर्देशिका में बदलने पर एक ही चीज़ टाइप करते हुए पाते हैं? आप शायद कम से कम फ़ाइलों को हर बार सूचीबद्ध करते हैं, शायद इतना कि आपके हाथ हर 'सीडी' के बाद स्वचालित रूप से 'एलएस' टाइप करें।

ठीक है, हर तरह की कोशिश करके, जिसके बारे में मैं सोच सकता था, यह पता चला कि हम जो लक्ष्य खोज रहे हैं उसे ठीक से पूरा करने का एक ही तरीका है। हमें एक शेल फंक्शन बनाना होगा।

शेल फ़ंक्शन शेल प्रोग्रामिंग का हिस्सा हैं। संकलित प्रोग्रामिंग भाषाओं की तरह, फ़ंक्शन एक प्रकार की प्रक्रियात्मक रूपांतरकता प्रदान करते हैं। अलग-अलग मापदंडों के साथ तर्क या अभिकलन के अक्सर उपयोग किए जाने वाले बिट को निष्पादित करने के लिए एक सामान्य कार्य बना सकते हैं। इस मामले में, पैरामीटर वर्तमान कार्यशील निर्देशिका है।

यहाँ एक सरल है:

function cs () {
    cd $1
    ls
}

जैसा कि @geirha corretly नोट करता है, उपरोक्त फ़ंक्शन विफल हो जाएगा यदि आप इसके नाम में किसी स्थान के साथ निर्देशिका में स्विच करने का प्रयास करते हैं:

$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>  

आपको इसके बजाय निम्नलिखित फ़ंक्शन का उपयोग करना चाहिए:

function cs () {
    cd "$@" && ls
    }

एक बार जब आप उस कोड को अपने साथ जोड़ लेते हैं ~/.bashrc, तो आपको ऐसा करने में सक्षम होना चाहिए:

hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$

1
यह व्हॉट्सएप युक्त निर्देशिकाओं के लिए विफल हो जाएगा। DV3500ea के उत्तर के लिए टिप्पणी देखें।
जिरह

24

आप builtinकमांड को bash में उपयोग कर सकते हैं :

function cd() {
    new_directory="$*";
    if [ $# -eq 0 ]; then 
        new_directory=${HOME};
    fi;
    builtin cd "${new_directory}" && ls
}

2
यह बहुत चालाक है। मेरे पास मेरे .bashrc में @Florian के समान एक समाधान था बहुत लंबे समय के लिए, लेकिन यह बहुत अधिक संतोषजनक है जब मैं भूल जाता हूं कि सहकर्मियों को अपने कंप्यूटर पर मेरा 'cs' उपनाम नहीं है।
डिनो

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

लेकिन गैर-अंतर्निहित आदेशों के बारे में क्या? उदाहरण के लिए, ऊपर ls कमांड को ओवरराइट करने के लिए काम नहीं करेगा। क्या "अंतर्निहित" के बजाय कुछ कीवर्ड का उपयोग करना है?
त्रिकुटकर

इसके लिए पूर्ण पथ का उपयोग करें, उदाहरण:function ls() { /usr/bin/ls $* }
OneOfOne

मुझे पुनर्परिभाषित करने में समस्याएँ आई cdक्योंकि rvmमेरी cdपरिभाषा भी बदलती है। देखें stackoverflow.com/a/19941991/1601989
DavidG

16

एक उपनाम के बजाय एक फ़ंक्शन का उपयोग करें:

cs() { cd "$1" && ls; }

5
+1, क्योंकि यह संस्करण बंद हो जाएगा यदि 'cd' विफल रहता है।
htorque

9

एक समारोह का उपयोग करने की नोक के लिए धन्यवाद फ्लोरियन डिस्च । मैं csनाम के रूप में उपयोग नहीं कर सकता क्योंकि csound पैकेज csमें एक कमांड है , इसलिए मैंने उपयोग किया ।lc

मैंने इसे ~/.bash_aliases( nano ~/.bash_aliases) में जोड़ा :

function lc () {
    cd $1;
    ls 
}

इसके resetप्रभावी होने के लिए टर्मिनल का होना आवश्यक है ।


8
करने के बाद $1ऐसे ही गैर उद्धृत इसे विफल कर देगा अगर निर्देशिका रिक्त स्थान हैं। इसके अलावा, आपको वापसी मूल्य की जांच करनी चाहिए cd; अगर यह विफल रहा (जैसे अनुमति अस्वीकृत), तो चलाने का कोई मतलब नहीं है lslc() { cd "$@" && ls; }
जिरह

1

इस फ़ंक्शन के विस्तार के रूप में:, cs() { cd "$1" && ls; }आप इस तरह के बजाय का cdउपयोग करके फ़ंक्शन के सभी तर्कों को पारित करना चाह सकते हैं :।$@"$1"cs() { cd $@ && ls; }


1

मुझे पुनर्परिभाषित करने में समस्याएँ आई cdक्योंकि rvmमेरी cdपरिभाषा भी बदलती है। Https://stackoverflow.com/a/19941991/1601989 देखें । मैं वास्तव में उपयोग नहीं करना चाहता था builtinक्योंकि जो कुछ भी rvmकर रहा है उसे छोड़ देगा ।

मैंने निम्नलिखित को अपने साथ जोड़ा .bashrc:

# cdd allows you to cd to the directory of the given file or directory
function cdd()
{
  if [[ $# -eq 0 ]]; then
    cd
  elif [[ -d "$*" ]]; then
    cd "$*"
  elif [[ -f "$*" ]]; then
    echo "WARNING: file given, cd to file's dirname" 1>&2
    local dir=$(dirname "$*")
    cd "$dir"
  else
    cd "$*"
  fi
}

function cs()
{
  cdd $* && ls
}

और फिर में rmvलाइन के बाद .bashrc:

alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.