{"id":170397,"date":"2026-05-05T00:24:37","date_gmt":"2026-05-04T22:24:38","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/brush-v0-4-0"},"modified":"2026-05-05T00:24:37","modified_gmt":"2026-05-04T22:24:38","slug":"brush-v0-4-0","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/news\/brush-v0-4-0","title":{"rendered":"Brush v0.4.0","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Brush v0.4.0\" src=\"\/wp-content\/uploads\/2026\/05\/deb96524d1d6aa343c36a9ae0b05d47e.jpg\" style=\"display:block;margin: 0 auto;\" \/>                                    <\/p>\n<p>Brush \u2013 est un interpr\u00e9teur de commandes \u00e9crit en Rust, qui combine la compatibilit\u00e9 avec POSIX et Bash avec des garanties de s\u00e9curit\u00e9 m\u00e9moire et de performance. Le projet vise \u00e0 devenir une alternative compl\u00e8te aux interpr\u00e9teurs traditionnels, permettant d'ex\u00e9cuter des scripts existants et d'utiliser .bashrc pratiquement sans modifications. Cette version regroupe plusieurs mois de travail et plus de 200 demandes de tirage fusionn\u00e9es, avan\u00e7ant consid\u00e9rablement l'interpr\u00e9teur vers un remplacement complet de Bash et des environnements compatibles POSIX.<\/p>\n<p>Les principales directions de d\u00e9veloppement dans cette version :<\/p>\n<ul>\n<li>Compatibilit\u00e9 avec Bash : ajout de set -e, set -u, pipefail, failglob, gestionnaire d'ERR, coproces et bien plus ;<\/li>\n<li>fiabilit\u00e9 : am\u00e9lioration du traitement des cas exceptionnels \u2013 canaux ferm\u00e9s, sortie corrompue, historique non UTF-8 et autres;<\/li>\n<li>Plateformes : prise en charge \u00e9tendue de macOS (fonctionnement en tant que shell de connexion), am\u00e9liorations sur Windows, FreeBSD, Android et syst\u00e8mes 32 bits ;<\/li>\n<li>Interactivit\u00e9 : ajout de fichiers de configuration TOML optionnels, hooks preexec\/precmd, am\u00e9lioration du support des macros readline et autres.<\/li>\n<\/ul>\n<h4>Am\u00e9liorations cl\u00e9s de la compatibilit\u00e9 avec Bash<\/h4>\n<p>Les principales am\u00e9liorations de cette version incluent une augmentation significative de la prise en charge des fonctionnalit\u00e9s de Bash. <strong>Gestion des erreurs<\/strong>:<\/p>\n<ul>\n<li>set -e (errexit) \u2013 sortie imm\u00e9diate en cas d'erreur;<\/li>\n<li>set -u (nounset) \u2013 erreur lors de l'acc\u00e8s \u00e0 une variable non d\u00e9clar\u00e9e;<\/li>\n<li>pipefail \u2013 le code de retour d'un pipeline est d\u00e9termin\u00e9 par la derni\u00e8re commande \u00e9chou\u00e9e;<\/li>\n<li>failglob \u2013 l'absence de correspondances pour une expression glob entra\u00eene maintenant une erreur.<\/li>\n<\/ul>\n<p><strong>Gestionnaires (Traps) et coproces<\/strong>:<\/p>\n<ul>\n<li>Gestionnaire ERR \u2014 permet d'ex\u00e9cuter des commandes en cas d'erreur ;<\/li>\n<li>Coproces (coproc) \u2014 ex\u00e9cution de processus en arri\u00e8re-plan avec communication bidirectionnelle.<\/li>\n<\/ul>\n<p><strong>Commandes int\u00e9gr\u00e9es<\/strong>:<\/p>\n<ul>\n<li>am\u00e9lioration du traitement de nombreuses constructions arithm\u00e9tiques, y compris les litt\u00e9raux \u00e0 base \u00e9lev\u00e9e, les d\u00e9passements et les op\u00e9rateurs d'affectation ;<\/li>\n<li>les corrections et am\u00e9liorations ont touch\u00e9 des commandes int\u00e9gr\u00e9es : caller, read, getopts, printf et autres.<\/li>\n<\/ul>\n<h4>Extension de la prise en charge des plateformes :<\/h4>\n<p>La version v0.4.0 rend le shell accessible sur une gamme plus large d'appareils :<\/p>\n<ul>\n<li>macOS : correction d'un probl\u00e8me qui faisait que le shell se bloquait lors de l'authentification. Brush peut maintenant \u00eatre utilis\u00e9 en tant que shell de connexion (login shell) ;<\/li>\n<li>Windows : am\u00e9liorations du traitement des chemins, ajout d'une \u00e9mulation \/dev\/null, ce qui augmente consid\u00e9rablement la convivialit\u00e9 sur Windows ;<\/li>\n<li>FreeBSD et Android : une build pour ces plateformes est prise en charge ;<\/li>\n<\/ul>\n<h4>Fonctionnalit\u00e9s interactives et API<\/h4>\n<ul>\n<li><strong>Configuration<\/strong>: ajout du support pour un fichier de configuration TOML optionnel (~\/.config\/brush\/config.toml) pour les param\u00e8tres sp\u00e9cifiques \u00e0 brush ;<\/li>\n<li><strong>Personnalisation<\/strong>: les styles de pr\u00e9-ex\u00e9cution \/ pr\u00e9-commande de zsh (derri\u00e8re un drapeau exp\u00e9rimental) ont \u00e9t\u00e9 impl\u00e9ment\u00e9s, utiles pour cr\u00e9er des invites personnalis\u00e9es et des outils de mesure de temps ;<\/li>\n<li><strong>API pour les d\u00e9veloppeurs<\/strong>: le type Shell est maintenant param\u00e9tr\u00e9 par des extensions (ShellExtensions), permettant aux d\u00e9veloppeurs d'ajouter leurs propres commandes int\u00e9gr\u00e9es et de modifier le comportement des variables sans avoir besoin de forker le projet ;<\/li>\n<li><strong>Divers<\/strong>:\n<ul> <noindex><\/p>\n<li>am\u00e9lioration de la prise en charge des macros readline pour la compatibilit\u00e9 avec <a rel=\"nofollow\" href=\"https:\/\/github.com\/starship\/starship\">starship<\/a>, <a rel=\"nofollow\" href=\"https:\/\/atuin.sh\/\">atuin<\/a> et <a rel=\"nofollow\" href=\"https:\/\/github.com\/junegunn\/fzf\">fzf (github.com)<\/a>;<\/li>\n<p><\/noindex> <\/p>\n<li>ajout des capacit\u00e9s de s\u00e9rialisation AST et d'\u00e9tat de shell via serde ;<\/li>\n<li>des fonctions serde pour la s\u00e9rialisation AST et l'\u00e9tat de shell sont maintenant disponibles dans brush-parser et brush-core.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Source : <a \ncontent=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.linux.org.ru\/news\/opensource\/18282635\">linux.org.ru<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Brush &ndash; \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Rust, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 POSIX \u0438 Bash \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f\u043c\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0446\u0435\u043b\u0435\u043d \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043e\u0439 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430\u043c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c .bashrc \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u042d\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0431\u043e\u043b\u0435\u0435 200 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":8,"featured_media":170398,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-170397","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"Brush \u2013 \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Rust, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Erik Peterson\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/news\/brush-v0-4-0\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Brush v0.4.0 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Brush \u2013 \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Rust, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/news\/brush-v0-4-0\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-05-04T22:24:38+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-05-04T22:24:38+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Brush v0.4.0 | ProHoster","description":"Brush est un shell de commande \u00e9crit en Rust qui combine.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/brush-v0-4-0","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Brush v0.4.0 | ProHoster","og:description":"Brush \u2013 \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Rust, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442.","og:url":"https:\/\/prohoster.info\/fr\/blog\/news\/brush-v0-4-0","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2026-05-04T22:24:38+00:00","article:modified_time":"2026-05-04T22:24:38+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":[],"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/170397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=170397"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/170397\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/170398"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=170397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=170397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=170397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}