
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), ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°;
- ΡΠ°Π·Π½ΠΈ:
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ AST ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· serde;
- ΡΠ΅ΠΏΠ΅ΡΡ Π² brush-parser ΠΈ brush-core Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ serde Π΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ AST ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru
