बाश के साथ जश और मक्स असंगत कहाँ हैं?


11

पॉश करने के लिए उचित प्रतिस्थापन के रूप में अन्य POSIX- संगत गोले किस हद तक कार्य कर सकते हैं? उन्हें सही "ड्रॉप-इन" प्रतिस्थापन की आवश्यकता नहीं है, लेकिन अधिकांश लिपियों के साथ काम करने के लिए पर्याप्त है और कुछ संशोधन के साथ बाकी का समर्थन करें।

  1. मैं स्पष्ट बैश स्क्रिप्ट - इनस्क्रिप्ट, डीएचसीपी क्लाइंट स्क्रिप्ट आदि - न्यूनतम संशोधन के साथ काम करना चाहता हूं

  2. मैं बहुत अधिक संशोधन की आवश्यकता नहीं करने के लिए अधिक विशिष्ट शेल स्क्रिप्ट का अपना संग्रह चाहता हूं

  3. मैं स्ट्रिंग हेरफेर और बिल्ट-इन regex पैटर्न मिलान जैसी विशेषताएं रखना चाहता हूं

मुझे पता है कि केवल गंभीर दावेदार zsh और mksh हैं। तो, आप में से उन लोगों के लिए जो या तो दोनों के साथ अच्छे हैं:

  1. बैश में क्या विशेषताएं हैं जो क्रमशः zsh और mksh नहीं हैं?

  2. गोले बैश के साथ क्या विशेषताएं साझा करते हैं, लेकिन इसके लिए असंगत सिंटैक्स का उपयोग करें?


3
कमांड शेल्स की तुलना: ( en.wikipedia.org/wiki/Comparison_of_command_shells ) उन्नत गाइड टू बैश स्क्रिप्टिंग: ( tldp.org/LDP/abs/html ) ZSH मैनुअल: ( zsh.sourceforge.net/Guide/zshguide.html ) MirBSD शैल मैनुअल: ( mirbsd.org/htman/i386/man1/mksh.htm )। मुझे क्षमा करें, लेकिन यह प्रश्न बहुत जटिल है। शायद आप पूछ रहे होंगे कि अपने विशिष्ट वितरण लिनक्स के लिए भेद्यता को ठीक करने के लिए बैश को कैसे पैच किया जाए?
टायलर मैजिनीस

3
ऐसा कोई शेल नहीं है जो bashएमएक्सएच और जेडश के प्रतिस्थापन में एक बूंद के रूप में कार्य कर सकता है, जो कि /bin/shशुद्धता के विभिन्न स्तरों के साथ कार्य कर सकता है , लेकिन नहीं bash
llua

1
संपूर्ण शेलचॉक चीज का मूल प्रश्न से कोई लेना-देना नहीं है और सिर्फ लोगों को विचलित कर रहा है, इसलिए मैंने इसे हटा दिया
माइकल मर्जेक

3
पूरा सवाल व्यापक है। शायद आपको इसे हटा देना चाहिए।
टायलर मैजिनीस

1
एकमात्र चिंता मुझे यह है कि BASH का रखरखाव फ्री सॉफ्टवेयर फाउंडेशन (FSF) द्वारा अच्छी तरह से किया जाता है। मेरे संपर्क मुझे बताते हैं कि BASH के भीतर, "मौलिक दोष," का रहस्योद्घाटन केवल एक मजबूत, अधिक सुरक्षित कार्यान्वयन को जन्म देगा। बहुत सारे वैकल्पिक गोले हैं जो आपकी आवश्यकता के लिए एक की सिफारिश करने की शुरुआत करते हैं, मुझे आपके उपयोग के मामले की एक ठोस समझ की आवश्यकता होगी। फिर O / S की तरफ ... इतनी सारी चीजें Bash से बंधी हुई हैं कि आप BASH को अपना पूरा O / S कॉल फिर से लिखना शुरू कर सकते हैं। सबसे अच्छा समाधान जो मैं देख सकता हूं वह है कि बनाए रखा गया शेल के साथ वितरण चुनना।
टायलर मैजिनीस

जवाबों:


19

मैं स्क्रिप्टिंग सुविधाओं से चिपके रहूंगा। रिच इंटरएक्टिव फीचर्स (कमांड लाइन संस्करण, पूर्णता, संकेत, आदि) पूरी तरह से भिन्न होते हैं, पूर्ण असंगत तरीकों से समान प्रभाव प्राप्त करते हैं। ज़श में क्या विशेषताएं हैं और बैश से गायब हैं, या इसके विपरीत? इंटरैक्टिव उपयोग पर कुछ संकेत देता है।

बैश करने के लिए निकटतम चीज़ ATT ksh93 या mksh (कोर्न शेल और एक क्लोन) होगी। Zsh में विशेषताओं का एक सबसेट भी है, लेकिन आपको इसे ksh इम्यूलेशन मोड में चलाने की आवश्यकता होगी, न कि zsh के मूल मोड में।

मैं POSIX सुविधाओं (जो किसी भी आधुनिक shशेल में उपलब्ध हैं ) को सूचीबद्ध नहीं करूंगा , न ही अपेक्षाकृत अस्पष्ट विशेषताएं, और न ही इंटरैक्टिव उपयोग के लिए उपरोक्त सुविधाओं के रूप में। अवलोकन बाश 4.2, ksh 93u और mksh 40.9.20120630 के अनुसार मान्य हैं जैसा कि डेबियन मट्ठा पर पाया जाता है।

शैल सिंटैक्स

का हवाला देते हुए

$'…'(बैकस्लैश इंटरपोलेशन के साथ शाब्दिक तार) ksh93 और mksh में उपलब्ध है। `$" ... "(अनुवादित स्ट्रिंग्स) बैश-विशिष्ट है।

सशर्त निर्माण करता है

Mksh और ksh93 को ;&एक caseबयान के माध्यम से गिरना है , लेकिन ;;&बाद के मामलों का परीक्षण करने के लिए नहीं । Mksh के ;|लिए है कि, और हाल ही में mksh ;;&संगतता के लिए अनुमति देता है।

((…))अंकगणितीय अभिव्यक्ति और [[ … ]]परीक्षण ksh विशेषताएँ हैं। कुछ सशर्त ऑपरेटर अलग-अलग हैं, नीचे "सशर्त अभिव्यक्ति" देखें।

Coprocesses

Ksh और bash दोनों में कोप्रोसेस हैं लेकिन वे अलग तरह से काम करते हैं।

कार्य

Mksh और ksh93 function name {…}मानक के अलावा फ़ंक्शन परिभाषाओं के लिए वाक्यविन्यास का समर्थन करते हैं name () {…}, लेकिन functionksh परिवर्तनों का उपयोग करने के name () …लिए नियम बनाते हैं, इसलिए संगतता बनाए रखने के लिए छड़ी । फ़ंक्शन नामों में अनुमत वर्णों के नियम भिन्न होते हैं; अल्फ़ान्यूमेरिक्स और से चिपके रहते हैं _

ब्रेस विस्तार

Ksh93 और mksh समर्थन ब्रेस विस्तार {foo,bar}। Ksh93 न्यूमेरिक रेंज का समर्थन करता है, {1..42}लेकिन mksh नहीं करता है।

व्यास विस्तार

Ksh93 और साथ mksh समर्थन सबस्ट्रिंग निष्कर्षण ${VAR:offset}और ${VAR:offset:length}नहीं, बल्कि मामले की तरह तह ${VAR^}, ${VAR,}आदि शामिल हो सकते के साथ मामला रूपांतरण कर सकते हैं typeset -lऔर typeset -uदोनों पार्टी और ksh में।

वे ${VAR/PATTERN/STRING}या के साथ प्रतिस्थापन का समर्थन करते हैं ${VAR/PATTERN//STRING}। STRING के लिए उद्धृत नियम थोड़े अलग हैं, इसलिए STRING में बैकस्लैश (और शायद अन्य वर्ण) से बचें ( ${VAR/PATTERN/$REPLACEMENT}यदि परिवर्तन में वर्ण शामिल हैं तो इसके बजाय एक चर और उपयोग का निर्माण करें )।

सरणी विस्तार ( ${ARRAY[KEY]}, "${ARRAY[@]}", ${#ARRAY[@]}, ${!ARRAY[@]}) ksh में की तरह पार्टी में काम करते हैं।

${!VAR}विस्तार ${OTHERVAR}जब का मूल्य VARहै OTHERVAR(अप्रत्यक्ष चर संदर्भ) बैश विशेष (ksh साथ कुछ अलग करता है ${!VAR})। Ksh में इस दोहरे विस्तार को प्राप्त करने के लिए, आपको इसके बजाय एक नाम संदर्भ का उपयोग करने की आवश्यकता है ( typeset -n VAR=OTHERVAR; echo "$VAR")। ${!PREFIX*}वही काम करता है।

प्रक्रिया प्रतिस्थापन

प्रक्रिया प्रतिस्थापन <(…)और >(…)ksh93 में समर्थित है, लेकिन mksh में नहीं।

वाइल्डकार्ड पैटर्न

shopt -s extglobKsh93 और mksh में ksh विस्तारित ग्लोब पैटर्न जिन्हें बैश में सक्रिय करने की आवश्यकता होती है, वे हमेशा उपलब्ध रहते हैं।

Mksh वर्ण वर्गों का समर्थन नहीं करता है [[:alpha:]]

IO पुनर्निर्देशन

बैश और ksh93 छद्म फाइलों को परिभाषित करते हैं और , लेकिन mksh नहीं करता है।/dev/tcp/HOST/PORT/dev/udp/HOST/PORT

लिपियों में एक पुनर्निर्देशन में वाइल्डकार्ड का विस्तार (के रूप में var="*.txt"; echo hello >$aकरने के लिए लिख a.txtअगर उस फ़ाइल नाम पैटर्न के लिए एकमात्र मुकाबला नहीं है) एक पार्टी विशेष सुविधा (अन्य गोले लिपियों में ऐसा कभी नहीं) है।

<<< यहाँ-स्ट्रिंग्स ksh में kash की तरह काम करते हैं।

>&सिंटेक्स त्रुटियों को पुनर्निर्देशित करने का शॉर्टकट भी mksh द्वारा समर्थित है, लेकिन ksh93 द्वारा नहीं।

सशर्त अभिव्यक्ति

[[ … ]] डबल ब्रैकेट सिंटैक्स

Ksh से डबल ब्रैकेट सिंटैक्स को ATT ksh93 और mashh दोनों द्वारा बैश में सपोर्ट किया जाता है।

फ़ाइल ऑपरेटर

Ksh93, mksh और bash POSIX के लिए एक ही एक्सटेंशन का समर्थन करते हैं, जिसमें -aएक अप्रचलित पर्यायवाची के रूप में शामिल है -e, -k(चिपचिपा), -G(egid के स्वामित्व वाला), -O(यूरोप के मालिक), -ef(एक ही फ़ाइल), -nt(नए की तुलना में), -ot(पुराने से पुराना)।

-N FILE (पिछले पढ़ने के बाद से संशोधित) mksh द्वारा समर्थित नहीं है।

Mksh में एक regexp मिलान ऑपरेटर नहीं है =~। Ksh93 के पास यह ऑपरेटर है, और यह बैश के समान मिलान करता है, लेकिन BASH_REMATCHमिलान किए गए समूहों को फिर से प्राप्त करने के बराबर नहीं है ।

स्ट्रिंग ऑपरेटरों

Ksh93 और mksh एक ही स्ट्रिंग तुलना ऑपरेटरों <और >बैश के साथ-साथ ==पर्याय का समर्थन करते हैं =। Mksh lexicographic क्रम को निर्धारित करने के लिए स्थानीय सेटिंग्स का उपयोग नहीं करता है, यह बाइट्स स्ट्रिंग्स के रूप में तार की तुलना करता है।

अन्य ऑपरेटर

-v VARपरीक्षण करने के लिए यदि एक चर परिभाषित किया गया है, तो वह बैश-विशिष्ट है। किसी भी POSIX शेल में, आप उपयोग कर सकते हैं [ -z "${VAR+1}" ]

Builtins

alias

अन्य नामों में अनुमत वर्ण का सेट सभी गोले में समान नहीं है। मुझे लगता है कि यह फ़ंक्शन के लिए समान है (ऊपर देखें)।

builtin

Ksh93 में एक अंतर्निहित नाम है builtin, लेकिन यह एक अंतर्निहित कमांड के रूप में एक नाम निष्पादित नहीं करता है। commandउपनाम और कार्यों को बायपास करने के लिए उपयोग करें ; यदि कोई मौजूद है, तो यह बिलिन को कॉल करेगा, अन्यथा एक बाहरी कमांड (आप इससे बच सकते हैं PATH= command error_out_if_this_is_not_a_builtin)।

caller

यह बैश-विशिष्ट है। आप के साथ .sh.fun, .sh.fileऔर .sh.linenoksh93 में एक समान प्रभाव प्राप्त कर सकते हैं । Mksh में आखिरी में है LINENO

declare, local,typeset

declareksh के लिए एक बैश-विशिष्ट नाम है typeset। उपयोग typeset: यह बाश में भी काम करता है।

Mksh के localलिए एक उपनाम के रूप में परिभाषित करता है typeset। Ksh93 में, आपको उपयोग typeset(या एक उपनाम को परिभाषित करने की आवश्यकता है )।

Mksh के पास कोई सहयोगी सरणियाँ नहीं हैं (वे अभी तक अप्रबंधित संस्करण के लिए स्लेट किए गए हैं)।

मुझे नहीं लगता कि typeset -tksh में bash (ट्रेस फ़ंक्शन) का एक सटीक समकक्ष है ।

cd

Ksh93 नहीं है -e

echo

Ksh93 और mksh प्रक्रिया -eऔर -nविकल्प की तरह bash में। Mksh भी समझता है -E, ksh93 इसे एक विकल्प के रूप में नहीं मानता है। बैकस्लैश का विस्तार डिफ़ॉल्ट रूप से ksh93 में बंद है, डिफ़ॉल्ट रूप से mksh में।

enable

Ksh अंतर्निहित कमांड को अक्षम करने का एक तरीका प्रदान नहीं करता है। एक बिलिन से बचने के लिए, बाहरी कमांड के पथ को देखें और इसे स्पष्ट रूप से लागू करें।

exec

Ksh93 है -aलेकिन नहीं -l। Mksh न तो है।

export

न तो ksh93 और न ही mksh है export -n। का प्रयोग करें typeset +x fooइसके बजाय, यह पार्टी और ksh में काम करता है।

Ksh पर्यावरण के माध्यम से कार्यों का निर्यात नहीं करता है।

let

let बाश और क्ष में समान है।

mapfile, readarray

यह एक बैश-विशिष्ट विशेषता है। आप while readकिसी फ़ाइल को पढ़ने और लाइनों की एक सरणी में विभाजित करने के लिए लूप या कमांड प्रतिस्थापन का उपयोग कर सकते हैं । ध्यान रखें IFSऔर ग्लोबिंग करें। यहाँ इसके बराबर है mapfile -t lines </path/to/file:

IFS=$'\n'; set -f
lines=($(</path/to/file))
unset IFS; set +f

printf

printfबहुत समान है। मुझे लगता है कि ksh93 सभी bash के प्रारूप निर्देशों का समर्थन करता है। mksh समर्थन नहीं करता है %qया %(DATE_FORMAT)T; कुछ संस्थापनों पर, printfmksh buildin नहीं है और इसके बजाय बाहरी कमांड को कॉल करता है।

printf -v VAR बैश-विशिष्ट है, ksh हमेशा मानक आउटपुट पर प्रिंट करता है।

read

रीडलाइन के बारे में सभी विकल्पों सहित कई विकल्प बाश-विशिष्ट हैं। विकल्प -r, -d, -n, -N, -t, -uबैश, ksh93 और mksh में समान हैं।

readonly

आप चर को केवल Ksh93 में पढ़ सकते हैं और उसी वाक्य रचना के साथ mksh घोषित कर सकते हैं। यदि चर एक सरणी है, तो आपको पहले इसे असाइन करने की आवश्यकता है, फिर इसे केवल-पढ़ने के लिए बनाएं readonly VAR। क्रियाओं को केवल ksh में ही नहीं पढ़ा जा सकता है।

set, shopt

करने के लिए सभी विकल्प setऔर set -oPOSIX या ksh विशेषताएं हैं।

shoptबैश-विशिष्ट है। कई विकल्प वैसे भी इंटरैक्टिव उपयोग की चिंता करते हैं। ग्लोबिंग और कुछ विकल्पों द्वारा सक्षम अन्य सुविधाओं पर प्रभाव के लिए, नीचे दिए गए "विकल्प" अनुभाग देखें।

source

यह संस्करण .ksh में भी मौजूद है। बैश और mksh में, के sourceबाद वर्तमान निर्देशिका खोजता है PATH, लेकिन ksh93 में, इसका सटीक समकक्ष है .

trap

DEBUGछद्म संकेत mksh में लागू नहीं है। Ksh93 में, यह सूचना को रिपोर्ट करने के लिए एक अलग तरीके से मौजूद है, विवरण के लिए मैनुअल देखें।

type

Ksh में, के typeलिए एक उपनाम है whence -v। Mksh में, type -pनिष्पादन योग्य के लिए पथ प्रिंट नहीं करता है, लेकिन एक मानव-पठनीय संदेश; आपको whence -p COMMANDइसके बजाय उपयोग करने की आवश्यकता है ।

विकल्प

shopt -s dotglob - ग्लोबिंग में डॉट फाइल्स को नजरअंदाज न करें

dotglobKsh93 में विकल्प का अनुकरण करने के लिए , आप सेट कर सकते हैं FIGNORE='@(.|..)'। मुझे नहीं लगता कि mksh में ऐसा कुछ है।

shopt -s extglob - ksh विस्तारित ग्लोब पैटर्न

extglobविकल्प ksh में हमेशा प्रभावी ढंग से है।

shopt -s failglob - ग्लोब पैटर्न कुछ नहीं होने पर त्रुटि

मुझे नहीं लगता कि यह mksh या ksh93 में मौजूद है। यह zsh में करता है (डिफ़ॉल्ट व्यवहार जब तक null_globया csh_null_globसेट न हो)।

shopt -s globstar**/पुनरावर्ती ग्लोबिंग

Ksh93 के साथ पुनरावर्ती ग्लोबिंग है **/, जिसके साथ सक्षम किया गया है set -G। Mksh में पुनरावर्ती ग्लोबिंग नहीं है।

shopt -s lastpipe - पैरेंट शेल में पाइप लाइन की अंतिम कमांड चलाएं

Ksh93 हमेशा पैरेंट शेल में पाइप लाइन की अंतिम कमांड चलाता है, जिसे बैश में lastpipeसेट करने के विकल्प की आवश्यकता होती है । Mksh हमेशा एक उपधारा में पाइपलाइन की अंतिम कमांड चलाता है।

shopt -s nocaseglob, shopt -s nocasematchकेस-असंवेदनशील पैटर्न

Mksh केस-असंवेदनशील पैटर्न से मेल नहीं खाता है। Ksh93 एक पैटर्न-दर-पैटर्न के आधार पर इसका समर्थन करता है: पैटर्न के साथ उपसर्ग ~(i)

shopt -s nullglob - उन प्रतिमानों का विस्तार करें, जो खाली सूची में किसी फ़ाइल से मेल नहीं खाते हैं

Mksh यह नहीं है। Ksh93 एक पैटर्न-दर-पैटर्न के आधार पर इसका समर्थन करता है: पैटर्न के साथ उपसर्ग ~(N)

चर

स्पष्ट रूप से अधिकांश BASH_xxxचर ksh में मौजूद नहीं हैं। $BASHPIDमहंगा लेकिन पोर्टेबल के साथ अनुकरण किया जा सकता है sh -c 'echo $PPID', और हाल ही में mksh में जोड़ा गया है। BASH_LINEहै .sh.linenoksh93 में और LINENOmksh में। BASH_SUBSHELLहै .sh.subshellksh93 में।

Mksh और ksh93 दोनों स्रोत फ़ाइल ENVजब वे शुरू करते हैं।

EUIDऔर UIDksh93 में मौजूद नहीं है। Mksh उन्हें फोन USER_IDऔर KSH_UID; यह नहीं है GROUPS

FUNCNAMEऔर FUNCNESTksh में मौजूद नहीं है। Ksh93 .sh.funऔर है .sh.level। के साथ घोषित कार्य function foo { …; }(कोई कोष्ठक नहीं!) का अपना नाम है $0

GLOBIGNOREksh93 में मौजूद है, लेकिन एक अलग नाम और वाक्य रचना के साथ: इसे कहा जाता है FIGNORE, और यह एक एकल पैटर्न है, न कि एक अलग-अलग सूची। एक @(…|…)पैटर्न का उपयोग करें । Ksh की FIGNOREउपमाएं पूरी तरह से अलग वाक्यविन्यास के साथ बैश की हैं।

Ksh93 और mksh की तरह कुछ भी नहीं है HOSTTYPE, MACHTYPEऔर OSTYPE। न ही SHELLOPTSया TIMEFORMAT

Mksh है PIPESTATUS, लेकिन ksh93 नहीं करता है।

Mksh और ksh93 है RANDOM


यदि आप एक वाक्य की शुरुआत में (गैर-पंजीकृत) ट्रेडमार्क "mksh" को सही ढंग से पुन: उत्पन्न नहीं करना चाहते हैं ( यहां "" dd। "" बनाम "dd" भी देखें ), कृपया "The MirBS" लिखें। इसके बजाय Korn Shell ”। यह है हमेशा गलत "mksh" के किसी भी अक्षर को बड़ा करना। धन्यवाद।
mirabilos

कैसे के $BASHPIDसाथ अनुकरण किया जा सकता है sh -c 'echo $PPID'? मैंने (sh -c 'echo $PPID')बैश में कोशिश की लेकिन यह मुझे उतना ही पीआईडी ​​देता है $$
फ्रैंकलिन यू

मुझे लगता है कि यह सवाल यहां बेहतर है । मैंने वहाँ सवाल कॉपी किया।
फ्रैंकलिन यू

4

यह सवाल बल्कि बहुत व्यापक है।

Mksh और zsh दोनों ऐसे गोले हैं जो बहुत सारे GNU बैश- विशिष्ट एक्सटेंशन का समर्थन करते हैं , लेकिन हमेशा कुछ ऐसे होते हैं जो समझ में नहीं आते हैं।

zsh अधिक सामान का समर्थन करता है, लेकिन केवल अपने मूल zsh मोड में, जो POSIX गोले (जैसे GNU बैश, AT & T ksh93 , mksh) के साथ संगत नहीं है । इसके अलावा, mksh अधिक दुबला और तेज और अधिक पोर्टेबल है।

सामान्य तौर पर, यदि यह आपकी स्क्रिप्ट है जिसके बारे में हम बात कर रहे हैं, तो आगे बढ़ें, बस उनका परीक्षण करें। (mksh अभी तक bash4- शैली के सहयोगी सरणियों का समर्थन नहीं करता है। "घोषित" कमांड बाश-विशिष्ट है, "टाइपसेट" एक समतुल्य है। मैं स्पष्ट रूप से उस बाहरी राज्य के बारे में कुछ भी बताने के लिए zsh से परिचित नहीं हूं। kh9393 "स्थानीय" नहीं है। लेकिन इसके लिए "टाइपसेट" का भी उपयोग किया जाता है।) लेकिन अगर यह बैश-लेस डेबियन सिस्टम चलाने के बारे में है, तो इसे भूल जाओ। बैश का अस्तित्व "वादा" (सिस्टम का एपीआई / एबीआई) का हिस्सा है, और इस पर बहुत कुछ निर्भर करता है।

डिस्क्लेमर: मैं mksh डेवलपर हूं।


1

ZSH गोले की तुलना

हाल के वर्षों में, हालांकि, एक्सटेंशन में एक निश्चित मात्रा में क्रॉसओवर हुआ है। Zsh (3.1.6 के रूप में) ने bash का ${var/old/new}' feature for replacing the text old with the text new in the parameter $var. Note one difference here: while both shells implement the syntax$ {var / # पुराना / नया} 'और ${var/%old/new}' for anchoring the match of old to the start or end of the parameter text, respectively, in zsh you can't put the' 'या %' inside a parameter: in other words{var / $ पुराना / नया}' जहाँ पुराना #' treats that as an ordinary character in zsh, unlike bash. To do this sort of thing in zsh you can use (from 3.1.7) the new syntax for anchors in any pattern,एक स्ट्रिंग की शुरुआत से मेल खाने के लिए (#s) के साथ शुरू होता है , और `(#e) का अंत करने के लिए मिलान करें। इन्हें सेट करने के लिए EXTENDED_GLOB के विकल्प की आवश्यकता होती है।

मैं mksh से सबसे अधिक अपरिचित हूं, इसलिए मुझे नहीं पता कि उस उत्तर की तलाश कहां है।

यदि आप शेल के लिए एक सुरक्षित प्रतिस्थापन की तलाश कर रहे हैं, तो इनमें से कोई भी शेल बैश से बहुत अलग नहीं है जहाँ तक आप जिस अंतर्निहित दोष की चर्चा कर रहे हैं।

पर्ल जैसी भाषा अधिक सुरक्षित रूप से इनपुट संभालती है। लेकिन स्थिरता यहां भी महत्वपूर्ण है। पर्ल शेल प्रतिस्थापन बहुत अच्छी तरह से अपनाया नहीं गया है। यह शेल अनुरक्षक की जिम्मेदारी है कि वह सुरक्षित रूप से इनपुट को संभाल सके। इसलिए जब आप स्क्रिप्ट लिखते हैं, तो सत्यापन करें, सत्यापन करें, सब कुछ मान्य करें! हर बार सही परिणाम का आश्वासन देने के लिए कोड अनुबंधों का उपयोग करें!

पर्ल शेल

शेल शॉक पर एफएसएफ स्टेटमेंट


अगर वास्तव में ऐसा होता है कि अन्य गोले का दोष समान है - जो मुझे कुछ संदेह है, तो मैंने जो चर्चा की है, उसके आधार पर - फिर यह एक बड़ी समस्या है, क्योंकि बहुत सारे तृतीय-पक्ष कार्यक्रम बिना किसी प्रकार के शेल के चर को पार करते हैं सत्यापन या कुछ भी। अगर ऐसा है तो हम पूरी तरह से POSIX को फेंक सकते हैं।
18L में DanL4096

1
बैश परियोजना में 10 वर्षों में 1 0-दिन का शोषण हुआ है। Microsoft Windows में प्रति सप्ताह, 0 दिनों के सभी 10 कारनामे हैं। क्या आप भी जानते हैं कि कितने लोगों ने इस बारे में बैश विकास टीम को परेशान किया है? बस इसे अपडेट करें और आगे बढ़ें! यह कोई बड़ी बात नहीं है।
टायलर मैजिनीस

1
@ DanL4096। शेल स्क्रिप्ट्स के लिए वैरिएबल पास करना जो कि तब वेरिएबल्स पर पर्याप्त संन्यास जाँच नहीं करता है, POSIX को बाहर फेंकने का कोई कारण नहीं है। समस्या उस व्यक्ति के साथ है जिसने पहली बार शेल स्क्रिप्ट लिखी थी।
fpmurphy

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.