Brush v0.4.0

Brush Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, написан Π½Π° Rust, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΡ‡Π΅Ρ‚Π°Π²Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с POSIX ΠΈ Bash с Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π·Π° бСзопасност Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ производитСлност. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π΅ насочСн към Ρ‚ΠΎΠ²Π° Π΄Π° станС ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π½Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ shell-ΠΎΠ²Π΅, позволявайки изпълнСниС Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ скриптовС ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° .bashrc практичСски Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. Π’Π°Π·ΠΈ вСрсия Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ няколко мСсСца Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ Π½Π°Π΄ 200 ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ pull request-Π°, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π°ΠΏΡ€Π΅Π΄Π²Π°ΠΉΠΊΠΈ Π² ΠΏΡ€Π°Π²Π΅Π½Π΅Ρ‚ΠΎ Π½Π° shell, ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ Bash ΠΈ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ с POSIX срСди.

Основни направлСния Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π² Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π»ΠΈΠ·:

  • ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с Bash: Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ set -e, set -u, pipefail, failglob, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ERR, сопроцСси ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ;
  • надСТдност: ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΈ случаи – Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ, ΠΏΠΎΠ²Ρ€Π΅Π΄Π΅Π½ ΠΈΠ·Ρ…ΠΎΠ΄, Π½Π΅-UTF8 история ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ;
  • ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ: Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° macOS (Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠ°Ρ‚ΠΎ Π²Π»ΠΈΠ·Π°Π½Π΅ shell), ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° Windows, FreeBSD, Android ΠΈ 32-Π±ΠΈΡ‚ΠΎΠ²ΠΈ систСми;
  • интСрактивност: Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ TOML ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, preexec/precmd Ρ…ΡƒΠΊΠΎΠ²Π΅, ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° макроси ΠΎΡ‚ readline ΠΈ Π΄Ρ€ΡƒΠ³ΠΎ.

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ подобрСния Π² Bash ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π°

Най-Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ подобрСния Π² Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π»ΠΈΠ· са Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° Bash. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅:

  • set -e (errexit) – Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΏΡ€ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°;
  • set -u (nounset) – Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°;
  • pipefail – ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° сС опрСдСля ΠΎΡ‚ послСдната Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°;
  • failglob – ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° съвпадСния Π·Π° glob-ΠΈΠ·Ρ€Π°Π· сСга Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ°.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ (Traps) ΠΈ сопроцСси:

  • ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ERR – позволява изпълнСниС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΏΡ€ΠΈ възникванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°;
  • сопроцСси (coproc) – стартиранС Π½Π° Ρ„ΠΎΠ½ΠΎΠ²ΠΈ процСси с двупосочна комуникация.

Π’Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:

  • ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π°Ρ€ΠΈΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‡Π½ΠΈ конструкции, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΈ с висока основа, прСливания ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π·Π° присвояванС;
  • ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΈ ΠΈ подобрСния Π²ΡŠΠ·Π΄Π΅ΠΉΡΡ‚Π²Π°Ρ‚ Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ: caller, read, getopts, printf ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ.

Π Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ:

Π Π΅Π»ΠΈΠ· v0.4.0 ΠΏΡ€Π°Π²ΠΈ shell-Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π½Π° ΠΏΠΎ-ΡˆΠΈΡ€ΠΎΠΊ ΡΠΏΠ΅ΠΊΡ‚ΡŠΡ€ ΠΎΡ‚ устройства:

  • macOS: ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½Π° Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΡˆΠ΅ замразяванС Π½Π° shell-Π° ΠΏΡ€ΠΈ Π»ΠΎΠ³Π²Π°Π½Π΅. Π‘Π΅Π³Π° brush ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ Π²Π»ΠΈΠ·Π°Π½Π΅ shell (login shell);
  • Windows: подобрСния Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡŠΡ‚ΠΈΡ‰Π°, Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Смуляция Π½Π° /dev/null, ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° удобството Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Windows;
  • FreeBSD ΠΈ Android: Π½Π°Π»ΠΈΡ‡Π΅Π½ Π±ΠΈΠ»Π΄ Π·Π° Ρ‚Π΅Π·ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ;

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ API

  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ: Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ TOML ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ» (~/.config/brush/config.toml) Π·Π° настройки, спСцифични Π·Π° brush;
  • ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅: Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ са zsh стиловС preexec/precmd Ρ…ΡƒΠΊΠΎΠ²Π΅ (с СкспСримСнталСн Ρ„Π»Π°Π³), ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° създаванС Π½Π° пСрсонализирани ΠΏΠΎΠΊΠ°Π½ΠΈ ΠΈ инструмСнти Π·Π° ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°Π½Π΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅;
  • API Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ: Ρ‚ΠΈΠΏ Shell Π²Π΅Ρ‡Π΅ Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€Π°Π½ с Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ (ShellExtensions), прСдоставяйки Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° добавят собствСни Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΈ Π΄Π° промСнят ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π±Π΅Π· нСобходимост ΠΎΡ‚ разклоняванС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°;
  • Π Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ:
    • ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° макроси readline Π·Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с starship, atuin ΠΈ fzf (github.com);
    • Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° сСриализация Π½Π° AST ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° Ρ‡Ρ€Π΅Π· serde;
    • сСга Π² brush-parser ΠΈ brush-core са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° serde Π·Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° сСриализация Π½Π° AST ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°.

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

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