तर्क के रूप में उपयोगकर्ता द्वारा दी गई निर्देशिका के आकार की जांच कैसे करें?


0

मैं तर्क के रूप में उपयोगकर्ता द्वारा दी गई निर्देशिका का आकार प्राप्त करना चाहता हूं। उदाहरण:

read -p "Enter the directory" target

du -k $target

यदि उपयोगकर्ता रास्ता देता है ~/Documents/dir, तो मुझे त्रुटि हो रही है संदेश:du: cannot access '~/Documents/dir': No such file or directory

जबकि अगर मैं कमांड देता हूं:

du -k ~/Documents/dir

मुझे वांछित आउटपुट मिल रहा है।

मैं डु कमांड के साथ चर का उपयोग क्यों नहीं कर पा रहा हूं?


क्या पटकथा के साथ चलने की कोशिश की -x? इसके अलावा, वह कौन सा फ़ोल्डर है जिस पर स्क्रिप्ट काम कर रही है और क्या उपयोगकर्ता एक पूर्ण पथ या एक सापेक्ष पथ की आपूर्ति करता है?
हेन्नेस सिप

-X के साथ भी कोशिश की, कोई मदद नहीं। उपयोगकर्ता द्वारा दिया गया पथ, डु कमांड के साथ दिया गया पथ है जैसा कि दूसरे मामले में है। जिस फ़ोल्डर में स्क्रिप्ट चल रही है वह एक अलग है।
अनुराग खरे

कोड टिल्ड विस्तार नहीं करता है । समाधान का उपयोग नहीं करना है ~। पथ का उपयोग करके, या तो सापेक्ष या निरपेक्ष निर्दिष्ट करें ~। उदाहरण के लिए, के बजाय ~/Documents/dirलिखें /home/myself/Documents/dir
जॉन १०२४२४

1
लाइन द्वारा मापदंडों को पढ़ना लाइन 1980 है इसलिए ... इन दिनों या तो आप कमांड लाइन में मापदंडों का उपयोग करते हैं या आप एक यूआई प्रदान करते हैं। आप फ़ाइल नाम दर्ज करने के लिए शेल के टैब-पूर्ण का उपयोग करने से भी उपयोगकर्ता को रोक रहे हैं। कमांड लाइन मापदंडों का उपयोग करना सरल है!
21

जवाबों:


0

~के बाद यह खोल ओवर में पढ़ा जाता है का विस्तार नहीं है, और न ही जब यह में रखा जाता है duआदेश। आप निम्नलिखित कोड के साथ विस्तार करने के लिए बैश को बाध्य कर सकते हैं:

read -p "Enter the directory" target
target=${target/#\~/$HOME}
du -k "${target}"

${target/#\~/$HOME}महत्वपूर्ण हिस्सा है। यह पर्यावरण चर ~की सामग्री के साथ बदल देता है HOME


विचार करें कि क्या होता है, यदि निर्देशिका नाम के रूप में, उपयोगकर्ता प्रवेश करता है ~root/dir
जॉन 1024
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.