जैसा कि यह खड़ा है, यह यू-बूट echo
और अभी खोल के साथ पूरा नहीं किया जा सकता है। ऐसा इसलिए है क्योंकि echo
के साथ आप देखे गए मैक्रो प्रतिस्थापन को echo
कमांड लॉन्च करने से पहले यू-बूट कमांड लाइन दुभाषिया द्वारा किया जा रहा है। सभी गूंज कमांड मूल रूप से इसे पारित तारों की सरणी मुद्रित करता है।
विशेष रूप से, यदि आप यू-बूट के वर्तमान (7/29/15) गिट भंडार से common/cli_simple.c
देखते हैं, तो आपको cli_simple_run_command
फ़ंक्शन मिलेगा। यह फ़ंक्शन एक स्ट्रिंग cmd
पारित किया गया है जिसमें ;
से अलग एकाधिक आदेश हो सकते हैं। यदि आप इस स्ट्रिंग को विभाजित करने वाले लूप के अंदर देखते हैं तो आपको cli_simple_process_macros
मिलेगा और उसके बाद आपको cli_simple_parse_line
पर cmd_process
पर कॉल मिलेगा। cli_simple_process_macros
अब छोड़कर, cli_simple_parse_line
मूल रूप से एक स्ट्रिंग लेता है और एक शेल की तरह स्ट्रिंग्स की एक सरणी में विभाजित होता है, जिससे आपको argv
और argc
दिया जाता है जो cmd_process
पर जाता है जो argv[0]
में आदेश को निष्पादित करता है।
दिलचस्प हिस्सा cli_simple_process_macros
है। यह इनपुट स्ट्रिंग को दूसरे तर्क के रूप में पहली तर्क और आउटपुट स्ट्रिंग के रूप में लेता है। यह फ़ंक्शन एक साधारण राज्य मशीन है जो यू-बूट पर्यावरण चर (या फ़ंक्शन नाम के रूप में मैक्रोज़) के रूप में दिखता है और उन्हें पर्यावरण चर के मान के साथ बदल देता है। इसे getenv
पर कॉल के साथ देखा जाता है और फिर आउटपुट स्ट्रिंग में प्रतिलिपि होती है। यदि आप देखते हैं कि cli_simple_process_macros
काम करता है तो आप देखेंगे कि यह केवल एक पास करता है, यह है कि यदि एक पर्यावरण परिवर्तक में एक और पर्यावरण चर होता है तो यह दूसरे पर्यावरण चर को संसाधित नहीं करता है, बल्कि यह केवल स्ट्रिंग मान की प्रतिलिपि बनाता है।
अंत में, यदि आप echo
कमांड के स्रोत को देखते हैं तो आप देखेंगे कि यह बहुत आसान है, बस मूल रूप से argv
के माध्यम से इसे लूपिंग और उचित रिक्त स्थान के साथ प्रत्येक स्ट्रिंग को प्रिंट करना।
तो मूल रूप से, यदि आप वांछित व्यवहार चाहते हैं, तो आपको पर्यावरणीय चर के लिए पुनरावृत्त होने के लिए cli_simple_process_macros
या तो echo
बदलने के लिए पर्यावरण चरों को देखने की आवश्यकता होगी। आप cli_simple_process_macros
कई बार आमंत्रित करने के लिए शायद cli_simple_run_command
बदल सकते हैं ताकि सभी घोंसला वाले वातावरण चर का विस्तार हो सके।