क्या मैं अतिरिक्त सामान करने के लिए एक टर्मिनल कमांड को संशोधित कर सकता हूं?


8

मैंने उपनामों, कार्यों में देखा है ... लेकिन मैं कुछ भी संतोषजनक नहीं आया हूं। मैं आपको कुछ परिदृश्य देता हूं:

  • 95% बार जब मैं cdएक फ़ोल्डर में आता हूं, तो मैं एक ls कमांड का पालन करता हूं ।
  • 90% बार कि मैं mkdir, मैं cdखुद में हूँ।

तुम्हें नया तरीका मिल गया है।

उन आदेशों (या अन्य कार्यक्षमता) को एक साथ बांधने का "सबसे साफ" तरीका क्या होगा?


5
उपनाम आपके लिए काम क्यों नहीं किया?
थोरबजोरन रावन एंडरसन

2
तो क्या mddir का cd परिणाम तब ls पर काम करना चाहिए?
bmike

@bmike खैर, एक नई बनाई गई निर्देशिका खाली होगी, इसलिए ls कुछ भी नहीं छापता है।
रैंडम 832

@ Random832 आप मानती हैं कि ls पर कोई झंडे नहीं हैं, लेकिन इससे भी महत्वपूर्ण बात यह है कि मेरा प्रश्न यह दर्शाता है कि एक बदलाव के लिए कितना टूटा / भारी हाथ वांछित है। मैं फ़ंक्शन पर उपनामों को पसंद करता हूं, लेकिन दोनों ही कोशिश कर सकते हैं कि क्या पूछा जाए।
bmike

1
@ fd0 मुझे संदेह नहीं है कि उपनाम काम नहीं करते। मैं पूछ रहा हूं क्यों। समस्या का एक सरल समाधान हो सकता है।
Thorbjørn रावन एंडरसन

जवाबों:


4

आप इन लाइनों को अपने .zsrhcया में रख सकते हैं.bashrc

[ -z "$PS1" ] && return
function cd {
builtin cd "$@" && ls -F
}

परिणाम ->

यहां छवि विवरण दर्ज करें

इस उत्तर से स्पष्टीकरण :

इससे पहले मेरे .bashrc में मेरे पास है: [-z "$ PS1"] && वापसी, और उस लाइन के बाद सब कुछ केवल इंटरेक्टिव सत्रों पर लागू होता है, इसलिए यह प्रभावित नहीं करता है कि cd स्क्रिप्ट में कैसे व्यवहार करता है।

इस टिप्पणी से आगे की जानकारी :

[-z "$ PS1"] जाँच करता है कि $ PS (इंटरेक्टिव प्रॉम्प्ट वेरिएबल) "शून्य लंबाई" (-z) है या नहीं। यदि यह शून्य लंबाई है, तो इसका मतलब यह सेट नहीं किया गया है, इसलिए बैश को इंटरैक्टिव मोड में नहीं चलना चाहिए। इन शर्तों के तहत && रिटर्न पार्ट सोर्सिंग .bashrc से बाहर निकलता है।

Btw, इस सवाल के लिए धन्यवाद, यह वास्तव में अच्छा है :)

संपादित करें:

एक और उपाय यह होगा कि आप अपने प्रॉम्प्ट में अपने ls को एकीकृत करें; मुझे यकीन है कि आप ओहमीश के साथ ऐसा कर सकते हैं;)


1
सामान्य तौर पर मानक कमांड के रूप में उसी नाम का उपयोग न करें जैसे कि सीडी ls rm आदि। आपको इन मानक कमांडों का उपयोग करने की आवश्यकता होगी
user151019

@ मर्क मैं 'rm -rf ~ / *' ^ ^ के लिए सहमत हूँ लेकिन cd कमांड के लिए, यह वास्तव में खतरनाक नहीं है। और कार्ल्स 'मौजूदा कमांड को अपग्रेड' करना चाहते हैं, इसलिए ...
स्ट्रॉहारा

मेरा कहना है कि मैंने इस समाधान का उपयोग तब से किया है जब से @StrawHara ने इसे प्रकाशित किया है और मुझे 0 समस्याएं हैं। मैं "यह कैसे चला गया" प्रदान करना चाहता था :) और यह वास्तव में उपयोगी है; इस तरह से मैं इसका ( .zshrc
कार्ल्स

13

मैं इसके लिए एक नई कमांड बनाना चाहूंगा। मुझे लगता है कि उन्हें एक में जोड़ना भी तर्कसंगत होगा।

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}

मुझे आपका विचार इन लोगों को मिलाना पसंद है! :-)
मार्टिन एलर्ट

5
यह उत्तर भी सबसे साफ है क्योंकि यह स्क्रिप्ट द्वारा उपयोग किए जाने पर cd / mkdir की डिफ़ॉल्ट परिभाषा को
विचलित

1
ज़रूर, लेकिन क्या होगा अगर आप गो प्रोग्रामिंग भाषा का उपयोग शुरू करने का निर्णय लेते हैं? : P
arxanas 15

@arxanas: आप मेकफाइल्स का उपयोग करते हैं? ;-)
DevSolar

2
हममम मुझे यह पसंद है। लेकिन यदि आप गलती से नाम गलत मानते हैं, तो आप एक नई निर्देशिका बनाते हैं। क्या छुट्टी (cd /.... या ../या कुछ) पर चेक लागू करना और निर्देशिका खाली होने पर उसे हटाना मुश्किल है? मेरा मतलब है कि यदि आप किसी निर्देशिका को छोड़ते हैं, तो जांचें कि क्या यह खाली है और यदि हां, तो इसे हटा दें। यदि आप ऐसा नहीं चाहते हैं, तो आप अभी भी जाने के बजाय cd का उपयोग कर सकते हैं
Schwertspize

6

मैंने इन चीजों को अपने साथ जोड़ने की कोशिश की है .bashrc:

cd() {
    command cd "$@"
    command ls
}

mkdir() {
    command mkdir "$@"
    command cd "$@"
}

हालांकि, मैंने पाया है कि यह उन लिपियों को गड़बड़ कर सकता है जो ओवरराइड कमांड का उपयोग करते हैं, और विकल्प हैंडलिंग नाजुक हो सकती है (उदाहरण के लिए, यदि आप -pउपरोक्त mkdirकमांड को पास करना चाहते हैं, तो यह भी पारित हो गया है cd)। बेहतर होगा कि आप अलग-अलग नामों (जैसे, cया mcd) के साथ उपनामों को परिभाषित करें ।


1
[ -z "$PS1" ] && returnफ़ाइल के अंत में डालने से पहले, उन कार्यों से पहले, मदद करनी चाहिए
Carles Alcolea

5

मुझे लगता है कि कार्य करने का तरीका है। कुछ इस तरह

chglist() {
    cd "$1" && ls
}

उदहारण के लिए।

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