Π”ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ShellCheck 0.9, статичСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π·Π° shell скриптовС

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π° Π΅ вСрсията Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ShellCheck 0.9, която Ρ€Π°Π·Π²ΠΈΠ²Π° систСмата Π·Π° статичСн Π°Π½Π°Π»ΠΈΠ· Π½Π° shell скриптовС, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² скриптовС с ΠΎΠ³Π»Π΅Π΄ особСноститС Π½Π° bash, sh, ksh ΠΈ dash. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ написан Π½Π° Haskell ΠΈ сС разпространява ΠΏΠΎΠ΄ лицСнзия GPLv3. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡΡ‚ сС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° интСграция с Vim, Emacs, VSCode, Sublime, Atom ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈ срСди, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ с GCC.

Π”ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ShellCheck 0.9, статичСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π·Π° shell скриптовС

ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° сС ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° синтактични Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ водят Π΄ΠΎ изпълнСниС Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° с Π³Ρ€Π΅ΡˆΠΊΠ°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ сСмантични ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π΅ сС ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°, Π½ΠΎ сС Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°Ρ‚ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° скрипта. ΠΠ½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° тСсни мСста, Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΠΊΠ°ΠΏΠ°Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π°Ρ‚ Π΄ΠΎ сривовС ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ обстоятСлства.

ΠžΡ‚ класовСтС Π½Π° ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с escaping Π½Π° спСциални символи ΠΈ ΠΎΠ±Ρ€Π°ΠΌΡ‡Π²Π°Π½Π΅ Π² ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ, Π³Ρ€Π΅ΡˆΠΊΠΈ Π² условни ΠΈΠ·Ρ€Π°Π·ΠΈ, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π²Ρ€Π΅ΠΌΠ΅ ΠΈ Π΄Π°Ρ‚ΠΈ, ΠΈ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ синтактични Π³Ρ€Π΅ΡˆΠΊΠΈ Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ. НапримСр, липсата Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ ΠΏΡ€ΠΈ сравнСниС β€ž[[ $foo==0 ]]β€œ, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ β€žvar = 42β€œ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° символа $ ΠΏΡ€ΠΈ присвояванС β€ž$foo=42β€œ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π±Π΅Π· ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ β€žecho $1β€œ, Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° излишни ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΈ скобки Π² β€žtr -cd β€˜[a-zA-Z0-9]'β€œ.

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° прСдоставянСто Π½Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠΈ Π·Π° подобряванС Π½Π° стила Π½Π° ΠΊΠΎΠ΄Π°, Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с прСносимостта ΠΈ повишаванС Π½Π° надСТдността Π½Π° скриптовСтС. НапримСр, вмСсто β€žecho $[1+2]β€œ Ρ‰Π΅ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ β€ž$((..))β€œ, конструкцията β€˜rm -rf β€ž$STEAMROOT/β€œ*’ Ρ‰Π΅ бъдС ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π° ΠΊΠ°Ρ‚ΠΎ нСбСзопасна ΠΈ способна Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ ΠΊΠΎΡ€Π΅Π½ΠΎΠ²Π°Ρ‚Π° дирСктория ΠΏΡ€ΠΈ нСзапълванС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° $STEAMROOT, Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° β€žecho {1..10}β€œ Ρ‰Π΅ бъдС ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎ с dash ΠΈ sh.

Π’ Π½ΠΎΠ²Π°Ρ‚Π° вСрсия:

  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΎΡ‚ Π²ΠΈΠ΄Π° β€˜local readonly foo’.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΈ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Π² β€˜declare x=1 y=$x’.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π°ΠΊΠΎ $? сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π½Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ ΠΎΡ‚ echo, printf, [ ], [[ ]] ΠΈ test.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠ° Π·Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° ((..))inarray[((idx))]=val.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠ° Π·Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π²ΠΎΠΉΠ½ΠΈ скоби Π² Π°Ρ€ΠΈΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‡Π½ΠΈ контСксти.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠ° Π·Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° ΠΊΡ€ΡŠΠ³Π»ΠΈ скоби Π² ΠΈΠ·Ρ€Π°Π·Π° a[(x+1)]=val.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster