প্রকল্প সম্পর্কে
sh হলো একটি শেল পার্সার, ফরম্যাটার এবং ইন্টারপ্রেটার যা পিউর গো-তে লেখা, POSIX Shell, Bash, Zsh এবং mksh সমর্থন করে। এটির জন্য Go 1.26 বা তার পরবর্তী সংস্করণ প্রয়োজন।
প্রকল্পটি তিনটি প্রধান প্যাকেজে সংগঠিত। syntax প্যাকেজ শেল স্ক্রিপ্টগুলিকে একটি সিনট্যাক্স ট্রি-তে পার্স করে, যা shfmt যেভাবে করে সেভাবেই পরিদর্শন এবং ফরম্যাটিং করার সুযোগ দেয়। shell প্যাকেজ শেল সেমান্টিক্স সহ এক-কল হেল্পার প্রদান করে: একটি কমান্ড লাইনকে আর্গুমেন্টে বিভক্ত করা এবং সেগুলিকে আবার কোট করা (shlex-এর মতো), স্ট্রিংয়ের ভিতরে $VAR এবং ~ প্রসারিত করা, এবং ** দিয়ে গ্লোবিং বা কেস-স্টাইলের প্যাটার্ন মেলানো। interp প্যাকেজ সিস্টেম শেল ছাড়াই শেল স্ক্রিপ্ট চালায়, এমনকি উইন্ডোজেও; এর হ্যান্ডলারগুলি স্ক্রিপ্টগুলি কী কী সম্পাদন এবং অ্যাক্সেস করতে পারবে তা স্যান্ডবক্সিং করার সুযোগ দেয়।
shfmt হলো প্রকল্পের সবচেয়ে বহুল ব্যবহৃত অংশ। এটি শেল প্রোগ্রাম ফরম্যাট করে এবং `go install mvdan.cc/sh/v3/cmd/shfmt@latest` এর মাধ্যমে ইনস্টল করা যায়। সাধারণ ব্যবহার হলো `shfmt -l -w script.sh`। এর ডিফল্ট স্টাইল syntax/canonical.sh দ্বারা চিত্রিত, এবং একটি ম্যানপেজ প্রদান করা হয়েছে। প্যাকেজগুলি অনেক চ্যানেলের মাধ্যমে বিতরণ করা হয়, যার মধ্যে রয়েছে Alpine, Arch, Debian, Docker, Fedora, FreeBSD, Homebrew, MacPorts, NixOS, OpenSUSE, PyPI, Scoop, Snapcraft, Void এবং webi। রিলিজ ট্যাগের জন্য Docker ইমেজ প্রকাশিত হয়, যেখানে `v3` সর্বশেষ স্থিতিশীল সংস্করণের জন্য এবং `latest` ডেভেলপমেন্টের জন্য; ইমেজগুলিতে শুধুমাত্র shfmt থাকে, Alpine ভ্যারিয়েন্ট উপলব্ধ।
নথিভুক্ত সতর্কতাগুলির মধ্যে রয়েছে: Bash অ্যাসোসিয়েটিভ অ্যারে ইনডেক্স করার সময় কোটিং প্রয়োজন, কারণ স্ট্যাটিক পার্সার অন্যথায় একটি অ্যারিথমেটিক এক্সপ্রেশন ধরে নেয়; `$((` বনাম `((` এর অস্পষ্টতা সমর্থিত নয় কারণ ব্যাকট্র্যাকিং পার্সারকে জটিল করে তুলবে এবং io.Reader-এর মাধ্যমে স্ট্রিমিং প্রতিরোধ করবে; `export`, `let` এবং `declare` কীওয়ার্ড হিসেবে পার্স করা হয় যাতে স্ট্যাটিক সিনট্যাক্স ট্রি সক্ষম হয় এবং `declare foo=(bar)` এর মতো ফর্ম সমর্থন করে; এবং যেহেতু লাইব্রেরিটি পিউর গো, ইন্টারপ্রেটার POSIX Shell এবং Bash সেমান্টিক্স সম্পূর্ণভাবে মেলাতে পারে না, উদাহরণস্বরূপ সাবশেল ফর্ক করা প্রক্রিয়ার পরিবর্তে গোরুটিন ব্যবহার করে, তাই প্রকৃত PID এবং ফাইল ডেসক্রিপ্টর সরাসরি ব্যবহৃত হয় না।
ফরম্যাটিং FAQ-তে বলা হয়েছে যে লাইন রেঞ্জের জন্য ফরম্যাটিং নিষ্ক্রিয় করা যায় না, যেখানে সম্ভব নতুন ফরম্যাটিং অপশন এড়ানো হয়, এবং প্রতিটি ব্যক্তিগত স্টাইল পছন্দ পূরণ করার চেয়ে ধারাবাহিকতাকে মূল্য দেওয়া হয়।
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-তে আরও উল্লেখ করা হয়েছে যে ড্রাইভ-বাই AI প্যাচগুলি সহায়ক নয় যদি না অবদানকারী একজন সক্রিয় ব্যবহারকারী বা অবদানকারী হন, এবং পরিবর্তে বিস্তারিত ইস্যু চাওয়া হয়।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.