इस प्रोजेक्ट के बारे में
sh एक शुद्ध Go में लिखा गया शेल पार्सर, फ़ॉर्मेटर और इंटरप्रेटर है, जो POSIX Shell, Bash, Zsh और mksh का समर्थन करता है। इसके लिए Go 1.26 या बाद का संस्करण आवश्यक है।
यह प्रोजेक्ट तीन मुख्य पैकेजों में संगठित है। syntax पैकेज शेल स्क्रिप्ट्स को एक सिंटैक्स ट्री में पार्स करता है, जिससे shfmt की तरह निरीक्षण और फ़ॉर्मेटिंग संभव होती है। shell पैकेज शेल सेमांटिक्स के साथ एक-कॉल हेल्पर प्रदान करता है: किसी कमांड लाइन को आर्गुमेंट्स में विभाजित करना और उन्हें वापस कोट करना (shlex के समान), स्ट्रिंग्स के भीतर $VAR और ~ का विस्तार करना, और ** के साथ ग्लॉबिंग या case-शैली पैटर्न का मिलान करना। interp पैकेज बिना किसी सिस्टम शेल के शेल स्क्रिप्ट्स चलाता है, जिसमें Windows भी शामिल है; इसके हैंडलर स्क्रिप्ट्स द्वारा निष्पादित और एक्सेस की जा सकने वाली चीज़ों को सैंडबॉक्स करने की अनुमति देते हैं।
shfmt इस प्रोजेक्ट का सबसे व्यापक रूप से उपयोग किया जाने वाला हिस्सा है। यह शेल प्रोग्राम्स को फ़ॉर्मेट करता है और इसे `go install mvdan.cc/sh/v3/cmd/shfmt@latest` के माध्यम से इंस्टॉल किया जा सकता है। सामान्य उपयोग है `shfmt -l -w script.sh`। इसकी डिफ़ॉल्ट शैली syntax/canonical.sh द्वारा दर्शाई गई है, और एक manpage प्रदान किया गया है। पैकेज कई चैनलों के माध्यम से वितरित किए जाते हैं, जिनमें Alpine, Arch, Debian, Docker, Fedora, FreeBSD, Homebrew, MacPorts, NixOS, OpenSUSE, PyPI, Scoop, Snapcraft, Void और webi शामिल हैं। Docker इमेजेज़ रिलीज़ टैग के लिए प्रकाशित की जाती हैं, जिसमें नवीनतम स्थिर के लिए `v3` और विकास के लिए `latest` होता है; इमेजेज़ में केवल shfmt होता है, और Alpine वेरिएंट उपलब्ध हैं।
प्रलेखित चेतावनियों में शामिल हैं: Bash associative arrays को इंडेक्स करते समय कोटिंग आवश्यक है, क्योंकि स्टैटिक पार्सर अन्यथा एक अंकगणितीय अभिव्यक्ति मान लेता है; `$((` बनाम `((` की अस्पष्टता समर्थित नहीं है क्योंकि बैकट्रैकिंग पार्सर को जटिल बना देगी और io.Reader के माध्यम से स्ट्रीमिंग को रोक देगी; `export`, `let` और `declare` को कीवर्ड के रूप में पार्स किया जाता है ताकि स्टैटिक सिंटैक्स ट्री सक्षम हो सकें और `declare foo=(bar)` जैसे रूपों का समर्थन हो; और चूंकि लाइब्रेरी शुद्ध Go है, इंटरप्रेटर POSIX Shell और Bash सेमांटिक्स से पूरी तरह मेल नहीं खा सकता, उदाहरण के लिए सबशेल फोर्क किए गए प्रोसेस के बजाय goroutines का उपयोग करते हैं, इसलिए वास्तविक PIDs और फ़ाइल डिस्क्रिप्टर सीधे उपयोग नहीं किए जाते।
फ़ॉर्मेटिंग FAQs में कहा गया है कि लाइन रेंज के लिए फ़ॉर्मेटिंग अक्षम नहीं की जा सकती, कि जहाँ संभव हो नए फ़ॉर्मेटिंग विकल्पों से बचा जाता है, और कि हर व्यक्तिगत शैली वरीयता को संतुष्ट करने के बजाय निरंतरता को महत्व दिया जाता है।
sh-syntax नामक एक तृतीय-पक्ष npm पैकेज पार्सर और फ़ॉर्मेटर का WASM बिल्ड बंडल करता है; पुराना GopherJS-आधारित mvdan-sh पैकेज आर्काइव कर दिया गया है। सूचीबद्ध एडिटर और टूल एकीकरणों में BashSupport-Pro, dockerfmt, intellij-shellscript, micro, neoformat, vscode-shfmt, shfmt.el, Trunk, modd, prettier-plugin-sh, sh-checker, mdformat-shfmt, pre-commit-shfmt और tesh शामिल हैं। README यह भी नोट करता है कि drive-by AI पैच तब तक सहायक नहीं होते जब तक कि योगदानकर्ता एक सक्रिय उपयोगकर्ता या योगदानकर्ता न हो, और इसके बजाय विस्तृत issues का अनुरोध करता है।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.