मैं कहूंगा कि यह तब है जब बैश आपके / बिन / श। यह बोर्न शेल की एक विशेषता नहीं है, और मुझे यकीन है कि यह पॉज़िक्स शेल की एक विशेषता भी नहीं है, वास्तव में वे इसे स्पष्ट रूप से मना करना चाहते हैं।
बैश वास्तव में कूर व्युत्पन्न खोल से अधिक है, एक बोर्न शेल की तुलना में, इसके नाम के बावजूद, और इसके एकमात्र कोर्न जैसे शेल की विशेषता है, और मेरी राय में यह रसोई की सुविधा है जिसमें कोई व्यावहारिक गुण नहीं है। डेवलपर्स जो मानकों के लिए बैश सुविधाओं से बचते हैं, जैसे कि बोर्न शेल, पॉज़िक्स शेल, या ksh88 सबसेट जो कि आधुनिक शेल सामान्य रूप में है, या दूसरे शब्दों में, अपने आप को अच्छी प्रथाओं और मानक मुहावरों के लिए प्रतिबद्ध करते हैं, जब उनके सॉफ़्टवेयर चालू होते हैं। लिनक्स और मैक और अब संभावित रूप से कमजोर, चूंकि शोषण लेखक अपने इरादों के बावजूद, 'बशीज़' का उपयोग करने के लिए स्वतंत्र हैं। जब तक / बिन / श, अन्य कोर्न शेल व्युत्पन्न के रूप में आमंत्रित किया जाता है, तब तक बेहतर संगतता, यह तभी है जब / बिन / श आपके लॉगिन शेल, या इंटरेक्टिव शेल है, जब बैश एक कोर्न शेल की तुलना में अधिक बोर्न शेल की तरह व्यवहार करता है,
मैं आपको यह समझाने की कोशिश करूंगा कि यह रसोई-सिंक सुविधा है, 2 मामलों के साथ: आप एक एम्बेडेड देव हैं, जो राउटर, नेटवर्क-संलग्न-भंडारण 1 बड़ा एनवी जैसे डिवाइस बनाता है, इसका मतलब है कि अधिक, मेमोरी, इसलिए, अधिक लागत, इतना कम मुनाफा, इसलिए, अगर यह बैश की इस विशेषता का उपयोग करने पर विचार करने का एक कारण था, तो क्या आपको इसके बजाय FPATH और ऑटोलॉड, ksh88 सुविधाओं का उपयोग नहीं करना चाहिए? पूरे समारोह को पर्यावरण में बाइट के लिए पास करने के बजाय? तुम भी विचार कर सकते हैं पार्सिंग और प्रूनिंग पर्यावरण थोक, इससे पहले कि यह एक गोले के लिए हो जाता है जो एक चर को गुमराह कर सकता है, जैसे कि फ़िल्टर ^ ^ $ (। *) $, और इसी तरह ...
यह रेखांकित करता है कि इसके बारे में क्या अद्वितीय है, इससे कोई फर्क नहीं पड़ता कि चर क्या है, और स्क्रिप्ट को चर का संदर्भ या उपयोग नहीं करना है, यह अभी भी असुरक्षित हो सकता है।
#!/bin/sh
exec /usr/local/myapp/support/someperlscript.pl
सूरज के नीचे और कुछ के लिए, ऊपर की लिपि की तरह ही सुरक्षित होना चाहिए, आप किसी भी चर का उपयोग नहीं कर रहे हैं आप किसी को कैसे भ्रमित कर सकते हैं? को बदल रहा है
#!/bin/bash -norc
exec /usr/local/myapp/support/someperlscript.pl
या तो मदद नहीं करता है, इसके पास ईएनवी या इसके साथ कुछ भी नहीं था - हर कोई जला हुआ है क्योंकि बैश को अद्वितीय होने की आवश्यकता है। तथ्य यह है कि संस्करण 2 को मारना मुद्दा है, मेरे लिए यह साबित करता है कि कोई भी कभी भी अपने अनुप्रयोगों के लिए इस सुविधा का उपयोग नहीं करता है , क्योंकि अन्यथा इसे इस समय के आसपास दुबकना नहीं चाहिए । और क्या बुरा है मूल रूप से इस सुविधा से परहेज नहीं है । यहाँ एक उदाहरण दिया गया है: 'su -' के साथ, यदि आप किसी से पूछेंगे, तो स्पष्टीकरण यह होगा कि यह पर्यावरण को प्रभावित करता है, मैन पेज की जाँच करें, और आपको बस 99.9% मिलेंगे। मैंने उस सही तरीके से परीक्षण किया, क्योंकि इस प्रणाली / बिन / श पर रूट का लॉगिन शेल है, और / बिन / श bash BUT है , इस उदाहरण में मैं कोशिश करता हूंमेरी .bash_profile को सख्त करने के लिए। मैंने अपना मौजूदा नाम रूट के लिए बदल दिया (जो सक्षम है), लेकिन मेरी सोच अगर सु की थी, तो संभवतः सूडो, वैसे भी, मैं इसके लिए बदल गया:
exec env -i TERM=vt102 LOGNAME=root USER=root HOME=/var/root /bin/ksh -i
इसलिए, मैं वास्तव में पर्यावरण को पूरी तरह से हटा रहा हूं, और एक न्यूनतम एनवी का उपयोग कर रहा हूं, और फिर एक शेल चला रहा हूं जिसमें वर्तमान प्रक्रिया के स्थान पर समस्या नहीं होनी चाहिए। फिर मानक उदाहरण के स्थान पर प्रयास करें:
%dock='() { echo -e "\e[2t\c"; echo dockshock;} ; dock' su
यह दिखाता है कि किसी विशेष फ़ंक्शन को पार्स करने से इसका कोई लेना-देना नहीं है, और एक फ़ंक्शन फ़ंक्शन का उपयोग और उपयोग कर सकता है। यदि रूट, आदि का परीक्षण करने के लिए आप फ़ंक्शन के तर्क की कल्पना कर सकते हैं, तो इस मामले में, यह केवल एक संशोधित रूप है जो एक एस्केप विंडो का उपयोग करके या टर्मिनल विंडो को आइकॉनिक करने या डॉक करने के लिए एक फ़ंक्शन है, जो कि बहुत ही मानक है, इसलिए मैं विघटित करने के लिए क्लिक करने के बाद, गोदी देखें - लेकिन, तो क्या? अब यह प्रयास करें:
%TERM='() { echo -e "\e[2t\c"; echo dockshock;} ; TERM' su -
और अंदाज लगाइये क्या? खिड़की को गोदी में लेकर चूसा जाता है। यहाँ बाद में ऐसा दिखता है ..
%TERM='() { echo -e "\e[2t\c"; echo dockshock;} ; TERM' su -
Password:
dockshock
# env
_=/usr/bin/env
HOME=/var/root
LOGNAME=root
TERM=vt102
USER=root
# echo $0
/bin/ksh
#
तो, इसलिए, उसके लिए बहुत कुछ! निर्यात किए गए कार्यों में वास्तव में आरसी स्क्रिप्ट्स पर प्राथमिकता है। आप इसे चकमा नहीं दे सकते।