5 पॉइंट द्वारा GN⁺ 2023-11-25 | 1 टिप्पणियां | WhatsApp पर शेयर करें

ShellCheck का परिचय

  • ShellCheck shell scripts में bugs ढूंढने वाला एक tool है.
  • इसे local environment में cabal, apt, dnf, pkg, brew के ज़रिए install किया जा सकता है.
  • script को paste करने पर ShellCheck analysis result दिखाता है.

ShellCheck की विशेषताएँ

  • ShellCheck को GPLv3 license के तहत स्वतंत्र रूप से इस्तेमाल किया जा सकता है.
  • इसका documentation ShellCheck Wiki में उपलब्ध है, और source code GitHub पर देखा जा सकता है.
  • यह ज़्यादातर distributions या package managers में पहले से packaged है.
  • प्रमुख editors में integrated linter के रूप में supported है, और CodeClimate, Codacy, CodeFactor के ज़रिए GitHub repositories के code की automatic checking की जा सकती है.
  • यह Haskell भाषा में लिखा गया है, इसलिए उस भाषा में रुचि रखने वाले users के लिए भी उपयुक्त है.

आभार

  • GitHub Sponsors के लिए विशेष धन्यवाद: Gitpod, Mercedes-Benz, BashSupport Pro, per1234, WhitewaterFoundry, cavcrosby, dcminter, photostructure, Cronitor, djdefi, steve-chavez आदि.

GN⁺ की राय

  • इस लेख की सबसे महत्वपूर्ण बात यह है कि ShellCheck shell scripts में bugs खोजने के लिए एक उपयोगी tool है.
  • ShellCheck मुफ़्त है, कई platforms और editors पर supported है, और इस्तेमाल में आसान है—यह बात लोगों को दिलचस्प लग सकती है.
  • खास तौर पर, open source community का support और Haskell में develop किया जाना software developers के लिए आकर्षक हो सकता है.

1 टिप्पणियां

 
GN⁺ 2023-11-25
Hacker News राय
  • स्क्रिप्ट लिखते समय सावधानियां

    • -u (nounset) option का उपयोग करके undeclared variables के इस्तेमाल पर error कराने की सिफारिश की गई। array expansion के समय खाली array का unbound माना जाना एक अपवाद है.
    • -n (noexec) option का उपयोग करके command execution रोका जा सकता है और fake execution (dry-run) आज़माया जा सकता है.
    • -e (errexit) option भी उपयोगी है, लेकिन यह ध्यान रखना चाहिए कि केवल failed "naked" commands ही exit को trigger करती हैं. इससे बचने के लिए command में || fail "..." जोड़ना पसंद किया जाता है.
  • shell script की vulnerabilities ढूँढना

    • arithmetic expansion के ज़रिए privilege escalation vulnerability मिली. उदाहरण के लिए, अगर $((1 + ENV_VAR)) के माध्यम से $ENV_VAR को control किया जा सकता है, तो code inject किया जा सकता है.
    • Shellcheck default settings में इसे पकड़ नहीं पाता. security-critical features लागू करते समय shell का उपयोग न करना बेहतर है.
  • Shellcheck और strictbash

    • Shellcheck बहुत उपयोगी है.
    • strictbash एक wrapper है जो script चलाने से पहले Shellcheck चलाता है, और error होने पर script को चलने नहीं देता. यह सभी Bash "strict mode" flags भी set करता है.
  • Shellcheck का उल्लेख

    • Shellcheck के बारे में बहुत उल्लेख हैं, और आखिरी बड़ी चर्चा 2021 में हुई थी.
  • Haskell और Turtle का उपयोग

    • Haskell का उपयोग करके Turtle library के साथ deployment scripts को convert किया गया, जिससे duplication काफी कम हुई.
    • नतीजतन code बहुत छोटा हो गया.
  • Shellcheck और linters का उपयोग

    • "सभी warnings ठीक करने के बाद ही commit करो" के सिद्धांत का पालन किया जाता है, और Shellcheck तथा दूसरे linters को pre-commit config में शामिल किया जाता है.
    • ज़्यादातर shell scripts .gitlab-ci.yml files में शामिल होती हैं, इसलिए उनकी जांच करना मुश्किल होता है. इसे अपने-आप जांचने के लिए एक wrapper बनाया गया.
  • Bash language server

    • Bash language server भी मौजूद है.
  • Shellcheck का सीखने वाला प्रभाव

    • Shellcheck का उपयोग करके जब पहली production /bin/sh script की जांच की गई, तब 80 के दशक से scripts लिखने के अनुभव के बावजूद कुछ नया सीखने को मिला.
  • Bach उपयोग की सिफारिश

    • जब Bash का उपयोग करना ही हो, तब Bach का उपयोग करने की सिफारिश की गई. पर्याप्त लंबे कामों के लिए Bash का उपयोग उचित नहीं हो सकता.
  • Shellcheck और source/import handling

    • Shellcheck शानदार है, लेकिन source या import को संभालना बहुत झंझटभरा है. यह समस्या इसलिए आती है क्योंकि sh अपने-आप में एक nightmare जैसा है.