منصوبے کے بارے میں

sh ایک شیل پارسر، فارمیٹر اور انٹرپریٹر ہے جو خالص Go زبان میں لکھا گیا ہے، اور 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۔ ڈوکر امیجز ریلیز ٹیگز کے لیے شائع کی جاتی ہیں، جن میں `v3` تازہ ترین مستحکم اور `latest` ڈیولپمنٹ کے لیے ہے؛ امیجز میں صرف shfmt ہوتا ہے، اور Alpine کے مختلف ورژن دستیاب ہیں۔ دستاویزی احتیاطیں شامل ہیں: Bash ایسوسی ایٹو اریوں کو انڈیکس کرتے وقت کوٹنگ ضروری ہے، کیونکہ بصورت دیگر سٹیٹک پارسر حساب کے ایک ایکسپریشن کا فرض کرتا ہے؛ `$((` بمقابلہ `((` کی ابہام کو سپورٹ نہیں کیا جاتا کیونکہ بیک ٹریکنگ پارسر کو پیچیدہ بنائے گی اور io.Reader کے ذریعے سٹریمنگ کو روکے گی؛ `export`، `let` اور `declare` کو سٹیٹک سنٹیکس ٹری کو فعال کرنے اور `declare foo=(bar)` جیسی شکلوں کو سپورٹ کرنے کے لیے کلیدی الفاظ کے طور پر پارس کیا جاتا ہے؛ اور چونکہ لائبریری خالص Go ہے، انٹرپریٹر مکمل طور پر POSIX Shell اور Bash کے سیمنٹکس سے مماثل نہیں ہوسکتا، مثال کے طور پر سب شیلز فورکڈ عمل کے بجائے گوروٹین استعمال کرتے ہیں، اس لیے حقیقی PIDs اور فائل ڈسکرپٹرز براہ راست استعمال نہیں ہوتے۔ فارمیٹنگ FAQs میں کہا گیا ہے کہ لائن رینجز کے لیے فارمیٹنگ کو غیر فعال نہیں کیا جاسکتا، نئی فارمیٹنگ آپشنز سے جہاں ممکن ہو گریز کیا جاتا ہے، اور ہر ذاتی اسٹائل کی ترجیح کو پورا کرنے سے ہم آہنگی کو اہمیت دی جاتی ہے۔ ایک تھرڈ پارٹی npm پیکیج جسے sh-syntax کہتے ہیں، پارسر اور فارمیٹر کا 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 پیچز مفید نہیں ہیں جب تک کہ تعاون کرنے والا فعال صارف یا تعاون کنندہ نہ ہو، اور تفصیلی مسائل کی درخواست کرتا ہے۔