$ Zv से शुरू होने वाले पर्यावरण चर नामों और मूल्यों के लिए मेनू कैसे बनाएं?


1

वाह! मैं यहाँ 2h + के लिए समान प्रश्न ब्राउज़ कर रहा हूँ! मुझे यकीन है कि मैं बस एक साधारण बात चाहता हूं।

कई कार्यों के साथ एक बैश सत्र में हमारे पास यात्रा करने के लिए दर्जनों निर्देशिकाएं हैं। उनके नाम सभी चर में शुरू होते हैं $zv। हम चरों का उपयोग करते हैं क्योंकि असली नाम बहुत लंबे हैं।

कुछ सरल और यादगार हैं, जैसे $zvv। लेकिन ऐसी चीजें भी हैं जो $zvdirectionदिखाई दे सकती हैं। और महत्वपूर्ण बात यह है कि उपलब्ध चर की सूची बदल जाती है। उपयोगकर्ता कभी भी निश्चित नहीं होता है कि कौन से $zv...संस्करण उपलब्ध होंगे। कुछ पूरी तरह से नए, ऑटो-जेनरेट किए जाएंगे।

इसलिए वह आमतौर पर ऐसा करेगी:

cd $zv <tab> <tab>

वहां कोई मेहनत नहीं। उसे एक सूची मिलती है, और मैन्युअल रूप से उसकी cd $zvलाइन पूरी होती है । लेकिन इन उपयोगकर्ताओं को इन $zv...लिपियों का तेजी से उपयोग करने की आवश्यकता होती है, हर समय, अक्सर छिपे हुए स्क्रिप्ट द्वारा उत्पन्न उपन्यास चर के साथ ।

इसलिए। जो मैं 2+ घंटे के लिए कोशिश कर रहा हूं वह एक फ़ंक्शन है, कहते हैं zv, जो उन्हें वर्तमान में उपलब्ध सभी $zv...ऑटोोकम्पलेट्स दिखाएगा , और फिर उम्मीद है कि उन्हें एक cd $zvसंकेत भी दे , जहां शेष पात्रों को जोड़ने के लिए बैश उनका इंतजार कर रहा है।

मुझे यकीन है कि यह फ़ंक्शन एक लाइनर होना चाहिए, लेकिन मैं फंस गया हूं!

जवाबों:


1

इसे इस्तेमाल करो:

arr=()
while read v; do arr+=( "$(printf "%s=%s" "$v" "${!v}")" ); done < <(compgen -v zv)
select i in "${arr[@]}"; do cd "${i#*=}"; break; done

यह selectसाधारण मेनू-आधारित संवाद प्रदान करने के लिए बैश बेसिन का उपयोग करता है ।


  • arr=() सरणी को प्रारंभ करता है
  • while ... इनपुट पढ़ता है और सरणी को भरता है।
    • arr+=( "..." ) सरणी में नई प्रविष्टियाँ जोड़ता है।
    • printf "%s=%s" "$v" "${!v}" ... चर नाम और उसकी सामग्री प्रिंट करता है।
  • compgen -v zvटाइप करते समय पूरा होने वाले सभी चरों की सूची तैयार करता है $zv<tab><tab>
  • यह सूची selectमेनू बनाने के लिए दी गई है ।
    • cd "${i#*=}"यह cdपहली बार पूर्ण होने के बाद चर में दी गई निर्देशिका में है =

धन्यवाद! "Compgen -v zv" भाग ठीक वही है जो मैं उम्मीद कर रहा था, और चयन मेनू एक उत्कृष्ट अतिरिक्त है। मैं इसका उपयोग करूंगा। आपका जवाब अच्छी तरह से किया गया है और कर्तव्य की पुकार से परे है।
user251764
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.