मैंने एक बार इसी तरह के उद्देश्य के लिए एक उपयोगी स्क्रिप्ट बनाई थी, जिसमें फाइंड -एन-सीडी के लिए एक फंक्शन एलसीडी था ।
आप टाइप करें fcd foo
और 3 चीजें हो सकती हैं:
- इस तरह की कोई डायरेक्टरी फू नहीं मिलती है, तो वह वापस आ जाती है
"no such directory " $1
- एक फ़ाइल मिली है: यह परीक्षण करता है कि क्या यह एक निर्देशिका है (या सिर्फ एक फ़ाइल) और यदि ऐसा है, तो यह वहां मौजूद है।
- एकाधिक फाइलें मिलती हैं - फिर एक चयन प्रस्तुत किया जाता है, जहां आप चयन की संख्या (या वापसी के लिए एक विशेष संख्या) टाइप करते हैं।
यह समान है कि इसमें आपको पूरे रास्ते को टाइप करने की आवश्यकता नहीं है, लेकिन आपने फ़ंक्शन को स्पष्ट रूप से कॉल किया है।
#!/bin/bash
#
# find cd. For input foo, find all directories .../.../foo
# GPLv3 Stefan Wagner (2010, 2012)
#
# doesn't handle blanks in directory names gracefully.
#
fcd ()
{
list=$(locate $1 | egrep "/$1$")
count=$(echo $list | wc -w )
case $count in
0)
echo "unknown directory: "$1 && return
# could search for partial matches Doc => Documentation
;;
1)
if [[ -d "$list" ]]; then
echo "$list";
cd "$list";
else
echo "not a directory: $1"
fi
;;
*)
select directory in $list "/exit/"
do
if [[ "$directory" = "/exit/" ]]; then break; fi
if [[ -d "$directory" ]]; then
echo "$directory";
cd "$directory";
break
else
echo "not a directory: "$1
fi
done
;;
esac
}
आपके पास source
फ़ंक्शन ( source fcd.sh
! . fcd.sh
) है और इसे स्क्रिप्ट के रूप में नहीं कहा जा सकता है, क्योंकि cd
यह केवल स्क्रिप्ट के संदर्भ में होगा, और परिष्करण के बाद आप तुरंत अपने शुरुआती डायर में वापस आ जाएंगे।
चूंकि यह साथ काम करता है locate
, यह निर्देशिकाओं को खोजने में बहुत तेज़ है (लेकिन हमेशा अप टू डेट नहीं)।
यह निर्देशिका के नामों में शालीनता से रिक्तता को नहीं संभालता है। यदि आपके पास समस्या का एक सुरुचिपूर्ण समाधान है तो मुझे खुशी होगी।
shopt -s autocd
ने कमांड लाइन पर काम किया। अब मैं सिर्फ डायरेक्टरी नाम लिखना शुरू कर सकता हूं और स्वतः पूर्ण का उपयोग कर सकता हूं और फिर रिटर्न और शेलcd
के डायरेक्टरी में प्रेस कर सकता हूं । इतना ठंडा !