Π§Π΅Ρ‚ΠΊΠ° v0.4.0

Π§Π΅Ρ‚ΠΊΠ° v0.4.0

Brush – это командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°, написанная Π½Π° языкС Rust, которая сочСтаСт ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с POSIX ΠΈ Bash с гарантиями бСзопасности памяти ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π°Ρ†Π΅Π»Π΅Π½ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌ, позволяя Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ скрипты ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .bashrc практичСски Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π­Ρ‚Π° вСрсия ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ нСсколько мСсяцСв Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ Π±ΠΎΠ»Π΅Π΅ 200 ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹Ρ… ΠΏΡƒΠ»Π»-рСквСстов, сущСствСнно продвигая ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Π΅ Bash ΠΈ POSIX-совмСстимых срСд.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ направлСния развития Π² этом выпускС:

  • ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Bash: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ set -e, set -u, pipefail, failglob, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ERR, сопроцСссы ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡƒΡ€ΡƒΠ³ΠΎΠ΅;
  • Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ: ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… случаСв – Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ², Π±ΠΈΡ‚ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π°, Π½Π΅-UTF8 истории ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…;
  • ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹: Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° macOS (Ρ€Π°Π±ΠΎΡ‚Π° Π² качСствС шСлла Π²Ρ…ΠΎΠ΄Π°), ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° 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 Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ доступной Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ спСктрС устройств:

  • macOS: исправлСна ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° зависала ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² систСму. Π’Π΅ΠΏΠ΅Ρ€ΡŒ brush ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС шСлла Π²Ρ…ΠΎΠ΄Π° (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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€