{"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\/da\/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 er et kommandolinjeprogram skrevet i Rust, som kombinerer kompatibilitet med POSIX og Bash med garantier for hukommelsessikkerhed og ydeevne. Projektet sigter mod at blive et fuldt alternativ til traditionelle shellprogrammer, hvilket muligg\u00f8r k\u00f8rsel af eksisterende scripts og brug af .bashrc n\u00e6sten uden \u00e6ndringer. Denne version samler flere m\u00e5neders arbejde og over 200 sammenflettede pull-anmodninger, hvilket betydeligt fremmer shellens vej mod en fuldst\u00e6ndig erstatning af Bash og POSIX-kompatible milj\u00f8er.<\/p>\n<p>De vigtigste udviklingsretninger i denne udgave:<\/p>\n<ul>\n<li>Bash-kompatibilitet: tilf\u00f8jet set -e, set -u, pipefail, failglob, ERR-handler, co-processer og meget mere;<\/li>\n<li>p\u00e5lidelighed: forbedret h\u00e5ndtering af undtagelsestilf\u00e6lde \u2013 lukkede kanaler, \u00f8delagt output, ikke-UTF8 historik og andre;<\/li>\n<li>Platforme: udvidet support for macOS (arbejde som login-shell), forbedret funktionalitet p\u00e5 Windows, FreeBSD, Android og 32-bit systemer;<\/li>\n<li>Interaktivitet: tilf\u00f8jet valgfrie TOML-konfigurationer, preexec\/precmd-hooks, forbedret underst\u00f8ttelse af readline-makroer og andet.<\/li>\n<\/ul>\n<h4>N\u00f8gleforbedringer i Bash-kompatibilitet<\/h4>\n<p>De vigtigste tilf\u00f8jelser i denne udgave omfatter en betydelig udvidelse af underst\u00f8ttelsen af Bash-funktioner. <strong>Fejlh\u00e5ndtering<\/strong>:<\/p>\n<ul>\n<li>set -e (errexit) \u2013 \u00f8jeblikkelig afslutning ved fejl;<\/li>\n<li>set -u (nounset) \u2013 fejl ved adgang til ikke-erkl\u00e6ret variabel;<\/li>\n<li>pipefail \u2013 exit-koden for pipelinen bestemmes af den sidste fejlede kommando;<\/li>\n<li>failglob \u2013 mangel p\u00e5 match for glob-udtryk f\u00f8rer nu til en fejl.<\/li>\n<\/ul>\n<p><strong>Handler (Traps) og co-processer<\/strong>:<\/p>\n<ul>\n<li>ERR-handler \u2013 giver mulighed for at udf\u00f8re kommandoer ved opst\u00e5ede fejl;<\/li>\n<li>co-processer (coproc) \u2013 start af baggrundsprocesser med tovejs kommunikation.<\/li>\n<\/ul>\n<p><strong>Indbyggede kommandoer<\/strong>:<\/p>\n<ul>\n<li>forbedret behandling af mange aritmetiske konstruktioner, herunder litteraler med h\u00f8j base, overflow og tildelingsoperat\u00f8rer;<\/li>\n<li>rettelser og forbedringer har ber\u00f8rt indbyggede kommandoer: caller, read, getopts, printf og andre.<\/li>\n<\/ul>\n<h4>Udvidelse af platformst\u00f8tte:<\/h4>\n<p>Udgivelse v0.4.0 g\u00f8r skallen tilg\u00e6ngelig p\u00e5 et bredere udvalg af enheder:<\/p>\n<ul>\n<li>macOS: rettet et problem, der fik skallen til at fryse ved login. Nu kan brush bruges som login-shell;<\/li>\n<li>Windows: forbedringer i h\u00e5ndteringen af stier, tilf\u00f8jet emulering af \/dev\/null, hvilket v\u00e6sentligt forbedrer brugervenligheden p\u00e5 Windows;<\/li>\n<li>FreeBSD og Android: bygningen for disse platforme underst\u00f8ttes;<\/li>\n<\/ul>\n<h4>Interaktive muligheder og API<\/h4>\n<ul>\n<li><strong>Konfiguration<\/strong>: tilf\u00f8jet st\u00f8tte til valgfiler i TOML-format (~\/.config\/brush\/config.toml) til indstillinger, der er specifikke for brush;<\/li>\n<li><strong>Tilpasning<\/strong>: implementeret zsh-stilede preexec\/precmd hooks (bag en eksperimentel flag), nyttige til at skabe tilpassede prompts og tidstagningsv\u00e6rkt\u00f8jer;<\/li>\n<li><strong>API til udviklere<\/strong>: Shell-typen er nu parameteriseret med udvidelser (ShellExtensions), hvilket giver udviklere mulighed for at tilf\u00f8je deres egne indbyggede kommandoer og \u00e6ndre variablers adf\u00e6rd uden at forgrene projektet;<\/li>\n<li><strong>Diverse<\/strong>:\n<ul> <noindex><\/p>\n<li>forbedret st\u00f8tte til readline-makroer for kompatibilitet med <a rel=\"nofollow\" href=\"https:\/\/github.com\/starship\/starship\">starship<\/a>, <a rel=\"nofollow\" href=\"https:\/\/atuin.sh\/\">atuin<\/a> og <a rel=\"nofollow\" href=\"https:\/\/github.com\/junegunn\/fzf\">fzf (github.com)<\/a>;<\/li>\n<p><\/noindex> <\/p>\n<li>tilf\u00f8jet muligheder for serialisering af AST og skalkens tilstand via serde;<\/li>\n<li>nu er der serde-funktioner tilg\u00e6ngelige i brush-parser og brush-core for mulighed for serialisering af AST og skalkens tilstand.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Kilde: <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.3 - 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\/da\/blog\/news\/brush-v0-4-0\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 er et kommandoskall skrevet i Rust, der kombinerer.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/news\/brush-v0-4-0","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/170397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=170397"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/170397\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/170398"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=170397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=170397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=170397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}