เปเบ›เบ‡ 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™