वहाँ mkdir फू करने के लिए एक शॉर्टकट है और तुरंत में सीडी?


89

यह कुछ ऐसा है जो मैं अक्सर करता हूं

$ mkdir foo
$ cd foo

यह एकल कमांड के रूप में काम करता है, लेकिन यह अधिक कीस्ट्रोक है और बिना समय बचाता है।

$ mkdir foo && cd foo

क्या इसके लिए कोई शॉर्टकट है?

संपादित करें

नीचे दिए गए मदद के उपयोग के साथ, यह सबसे सुरुचिपूर्ण उत्तर लगता है।

# ~/.bashrc
function mkcd {
  if [ ! -n "$1" ]; then
    echo "Enter a directory name"
  elif [ -d $1 ]; then
    echo "\`$1' already exists"
  else
    mkdir $1 && cd $1
  fi
}

1
आप फ़ंक्शन का नाम बदल सकते हैं mkdirयदि आप command mkdir $1केवल mkdir $1फ़ंक्शन बॉडी में उपयोग करते हैं।
एंडी

2
(1) क्यों नहीं "mkdir $ 1; सीडी $ 1" के बजाय "&&"? इस तरह "mddir" विफल होने पर भी "cd" सफल होता है, और आपको इसे पहले से मौजूद मचान की जरूरत नहीं है। (2) जैसा कि लिखा गया है कि आपका कार्य काम नहीं करेगा (निर्देशिका नाम के लिए आपको संकेत देने के लिए)। आपको अस्तित्व परीक्षण में (यदि वर्तमान में "एलिफ") से एक अलग "यदि" खंड में रखना है।
क्वैक

जवाबों:


45

मैं कोई लिनक्स / बैश विशेषज्ञ नहीं हूं, लेकिन इसे अपने में डालने का प्रयास करें .bashrc

function mkdir
{
  command mkdir $1 && cd $1
}

पीएस धन्यवाद डेनिस उपयोग करने के लिए command mkdir


2
इसके बजाय `which mkdir`, बस उपयोग करें command mkdir
डेनिस विलियमसन

1
धन्यवाद डेनिस। कुछ भी नहीं है man command- क्या आप मुझे एक संदर्भ में निर्देशित कर सकते हैं? (मैं यह पता लगा सकता हूं कि यह क्या करता है, लेकिन यह पूरी तरह से भुगतान करता है;)
एंडी

2
commandके मैनुअलbash में वर्णित है (जो कि यह बिल्ट-इन है; यह एक अलग कमांड नहीं है)। आप भी आजमा सकते हैं help command
१५:१०

यह भी zsh btw के लिए काम करता है
फ्लोरियन लोच

93

bash, zshशेल

यदि आप दूसरे समारोह को याद नहीं करना चाहते हैं और न ही किसी को बुरा मानना ​​है:

$ mkdir /home/foo/doc/bar && cd $_

$_(डॉलर अंडरस्कोर) बैश आदेश चर सबसे हाल ही में पैरामीटर शामिल है। इसलिए यदि कोई उपयोगकर्ता कमांड लाइन पर निम्नलिखित टाइप करता है: echo foo bar && echo $_ bazतो आउटपुट निम्नानुसार होगा:

foo bar
bar baz

fishशैल

मछली के खोल में, मैं निम्नलिखित लिखूंगा:

> mkdir / घर / फू / डॉक्टर / बार
> सी.डी. alt + ↑

पूरी तरह से ऊपर या नीचे तीर कुंजी के साथ संयुक्त कुंजी कमांड पैरामीटर इतिहास के माध्यम से चक्र होगी।


4
इसमें zshभी काम आता है।
नबील कादिमी

3
क्या आप समझा सकते हैं कि $ _ क्या है? यहाँ नौसिखिया।
arg20

@NabilKadimi क्या आपका मतलब है कि <kbd> Alt <kbd> + <kbd> imi <kbd> Zsh में अच्छा काम करता है? असल में, zsh 5.4.2 और ऑन-माय-ज़श के साथ, Alt + me मुझे चरित्र 'ए' देता है।
सप्ताहांत

$ _ के लिए +1 - स्टुपिड सेक्सी फ़्लैंडर्स!
सिगू

21

के लिए ओह-मेरी-zsh उपयोगकर्ताओं:
$ take 'directory_name'

संदर्भ: https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet


1
क्या आप इसे और अधिक विस्तार से बता सकते हैं?
bwDraco

@bwDraco type take, तो आप मिल जाएगा take is a shell function from /home/username/.oh-my-zsh/lib/functions.zsh। vi फ़ाइल तब आपको मिलती हैfunction take() { mkdir -p $@ && cd ${@:$#} }
सप्ताहांत

10

व्हाट अबाउट:

$ mkdir newdirname; cd $_

क्वेक क्विज़ोट और केज़ के उत्तरों के संयोजन से && का उपयोग करना थोड़ा आसान है।


26
मुद्दा &&यह है कि cdयदि mkdirकमांड विफल हो जाता है तो निष्पादित नहीं किया जाएगा
slhck

1
@slhck वास्तव में यह क्विक्सोट का बिंदु था: cd भले ही mkdir विफल रहता है (उदाहरण के लिए यदि यह पहले से मौजूद है, तो उपयोगकर्ता को वास्तव में पथ के लिए दूसरा कमांड लिखने के लिए मजबूर करता है)। हालाँकि इसके विपरीत जो यह कहता है, वह सहजता के लिए नहीं है: && से अधिक जटिल नहीं है;
मूला

7

आप कुछ इस तरह की कोशिश कर सकते हैं:

#!/bin/sh
mkdir $1 && cd $1

इस स्क्रिप्ट को कुछ ऐसे स्थान पर सहेजें जो आपके पथ में है, उदाहरण के लिए, / usr / स्थानीय / बिन या ~ / बिन (आपको इसे अपने पथ में अंतिम रूप से अपनी ~ / .profile फ़ाइल में रखना होगा)। तब आप बस इसे कॉल कर सकते हैं।


4
यह कैसे काम कर सकता है? यह केवल स्क्रिप्ट cdके निष्पादन के संदर्भ में लगता है ~/bin/mkcd, स्क्रिप्ट के कॉलर के लिए नहीं।
एरिक अल्लिक


2

यहाँ एक सरल कार्य है ~/.config/fish/config.fishजिसे मैंने अपनी फ़ाइल में रखा है जो इस कार्य को पूरा करता है:

function mkcd
    mkdir -pv $argv;
    cd $argv;
end

-pvटैग उप-निर्देशिका के साथ निर्देशिका के निर्माण के लिए अनुमति देता है।


0

वांछित परिणाम के आधार पर यदि निर्देशिका पहले से मौजूद है।

यदि निर्देशिका पहले से मौजूद है तो विफल

mkcd() {
    mkdir $1 && cd $1
}

भले ही निर्देशिका बदलें

mkcd() {
    mkdir $1 ; cd $1
}

उपयोग mkcd कुछ / पथ / to / my / dir


0

मैंने पाया कि नीचे दिया गया फ़ंक्शन केवल एक निर्देशिका बना सकता है, अगर मैं एक ही समय में उपनिर्देशिका बनाना चाहता हूं, तो यह काम नहीं करता है:

function mkdir
{
  command mkdir $1 && cd $1
}

इसलिए मैंने इसे बदल दिया और अब इसका काम बहुत अच्छा है!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.