ठीक है, एक छोटी सी पृष्ठभूमि: मैं एक मैक का उपयोग करता हूं, और सीएलआई में जितना संभव हो उतना संभव है।
विशेष रूप से, मैं अक्सर एक यूएसबी स्टिक, cp
या mv
एक फ़ाइल पर पॉप करता हूं , और फिर तुरंत इसे अस्वीकार करना चाहता हूं (इसे अनमाउंट और डिस्कनेक्ट करता हूं)। यह आम तौर पर मुट्ठी भर कीस्ट्रोक्स में पूरा किया जा सकता है, इसे छोड़कर, जिसमें (10.7 में) एक खाली डेस्कटॉप स्थान पर जाने की आवश्यकता होती है (आमतौर पर दो स्थान कम से कम), डिस्क का चयन, और "कमांड-ई" दबाकर। सच कहूँ तो, यह अनमाउंट प्रक्रिया, परिमाण के कई आदेशों द्वारा, प्रक्रिया का सबसे अधिक समय लेने वाला और थकाऊ हिस्सा है।
यह केवल कहने के लिए सक्षम होने के लिए कहीं अधिक प्राकृतिक और कुशल होगा:
ej<tab> J<tab>
मेरा USB स्टिक माउंट / वॉल्यूम / जेफरसन पर बोलें। मैं अपने 6 कीस्ट्रोक्स से जो पाने की उम्मीद करूंगा वह निम्नलिखित है:
eject /Volumes/Jefferson
यह कमांड चलना चाहिए:
diskutil unmount /Volumes/Jefferson
इसलिए, मैंने एक अच्छा सा फंक्शन लिखा है:
eject() {
diskutil unmount /Volumes/$1
}
और इसके साथ जाने के लिए एक पूर्ण कार्य:
compdef '_files -g "/Volumes/*"' eject
हालांकि, इसके साथ एक समस्या है। _files
समारोह पूरा पथ उत्पन्न करता है। अब, मैं अपने "इजेक्ट" फंक्शन में लाइन को बदल सकता था diskutil unmount $1
और चीजें काम करेंगी, लेकिन तब मेरे पास माउंट पॉइंट नाम के पहले अक्षर को टाइप करने की कोई क्षमता नहीं है, क्योंकि पथ / वॉल्यूम / के साथ शुरू होता है। उदाहरण के लिए, यदि मैं टाइप करता हूं, तो मुझे J<tab
PWD में फ़ाइलों के लिए स्वतः पूर्णता प्राप्त होगी। मुझे /Volumes/J<tab>
वांछित पूर्णता प्राप्त करने के लिए टाइप करना होगा ।
तो, क्या एक पूर्ण कार्य है जो पूर्ण पथ उत्पन्न करने के बजाय पूर्वनिर्धारित, विशिष्ट स्थान से फ़ाइल नाम देता है?
मैं वास्तव में 6 कीस्ट्रोक्स के लिए इसे नीचे लाना चाहता हूं।