bash - बैश स्क्रिप्ट में वर्तमान निर्देशिका नाम(पूर्ण पथ के बिना) प्राप्त करें




shell terminal (13)

Grep के बारे में कैसे:

pwd | grep -o '[^/]*$'

मैं केवल एक टर्मिनल कमांड में बैश स्क्रिप्ट में, या इससे भी बेहतर, वर्तमान कार्यशील निर्देशिका नाम कैसे प्राप्त करूं।

pwd वर्तमान कार्यशील निर्देशिका का पूरा पथ देता है, उदाहरण के लिए /opt/local/bin लेकिन मुझे केवल bin


Regex के साथ grep के नीचे भी काम कर रहा है,

>pwd | grep -o "\w*-*$"

आप बेसनाम उपयोगिता का उपयोग कर सकते हैं जो स्ट्रिंग से प्रत्यय (यदि स्ट्रिंग में मौजूद है) में समाप्त होने वाले किसी भी उपसर्ग को हटा देता है, और मानक आउटपुट पर परिणाम प्रिंट करता है।

$basename <path-of-directory>

निम्न आदेशों का परिणाम आपकी वर्तमान कार्य निर्देशिका को बैश स्क्रिप्ट में प्रिंट करना होगा।

pushd .
CURRENT_DIR="`cd $1; pwd`"
popd
echo $CURRENT_DIR

बेसनाम के लिए कोई ज़रूरत नहीं है, और विशेष रूप से पीडब्ल्यूडी चलाने वाले सबहेल की आवश्यकता नहीं है (जो एक अतिरिक्त, और महंगा, कांटा ऑपरेशन जोड़ता है ); खोल आंतरिक रूप से पैरामीटर विस्तार का उपयोग कर ऐसा कर सकता है:

result=${PWD##*/}          # to assign to a variable

printf '%s\n' "${PWD##*/}" # to print to stdout
                           # ...more robust than echo for unusual names
                           #    (consider a directory named -e or -n)

printf '%q\n' "${PWD##*/}" # to print to stdout, quoted for use as shell input
                           # ...useful to make hidden characters readable.

महज प्रयोग करें:

pwd | xargs basename

या

basename "`pwd`"

मेरे जैसे वहां जॉकी ढूंढें:

find $PWD -maxdepth 0 -printf "%f\n"

मैं आमतौर पर इसे sh स्क्रिप्ट में उपयोग करता हूं

SCRIPTSRC=`readlink -f "$0" || echo "$0"`
RUN_PATH=`dirname "${SCRIPTSRC}" || echo .`
echo "Running from ${RUN_PATH}"
...
cd ${RUN_PATH}/subfolder

आप चीजों को स्वचालित करने के लिए इसका उपयोग कर सकते हैं ...


मैं दृढ़ता से gbasename का उपयोग करना पसंद करता gbasename , जो जीएनयू gbasename का हिस्सा है।


यह धागा बहुत अच्छा है! यहां एक और स्वाद है:

pwd | awk -F / '{print $NF}'

basename प्रोग्राम का प्रयोग करें। आपके मामले के लिए:

% basename "$PWD"
bin

$ echo "${PWD##*/}"


echo "$PWD" | sed 's!.*/!!'

यदि आप बोर्न शेल या ${PWD##*/} का उपयोग कर रहे हैं तो उपलब्ध नहीं है।






terminal