bash-hackers-wiki/scripting/terminalcodes/index.html

138 lines
65 KiB
HTML

<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link href=https://flokoe.github.io/bash-hackers-wiki/scripting/terminalcodes/ rel=canonical><link href=../style/ rel=prev><link href=../../snipplets/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.44"><title>Terminal codes (ANSI/VT100) introduction - The Bash Hackers Wiki</title><link rel=stylesheet href=../../assets/stylesheets/main.0253249f.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#terminal-codes-ansivt100-introduction class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="The Bash Hackers Wiki" class="md-header__button md-logo" aria-label="The Bash Hackers Wiki" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> The Bash Hackers Wiki </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Terminal codes (ANSI/VT100) introduction </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/flokoe/bash-hackers-wiki title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> flokoe/bash-hackers-wiki </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> Start </a> </li> <li class=md-tabs__item> <a href=../../commands/classictest/ class=md-tabs__link> Commands </a> </li> <li class=md-tabs__item> <a href=../../dict/directory/ class=md-tabs__link> Dict </a> </li> <li class=md-tabs__item> <a href=../../howto/calculate-dc/ class=md-tabs__link> Howto </a> </li> <li class=md-tabs__item> <a href=../../internals/shell_options/ class=md-tabs__link> Internals </a> </li> <li class=md-tabs__item> <a href=../../misc/bashphorisms/ class=md-tabs__link> Misc </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../bashbehaviour/ class=md-tabs__link> Scripting </a> </li> <li class=md-tabs__item> <a href=../../snipplets/ class=md-tabs__link> Snipplets </a> </li> <li class=md-tabs__item> <a href=../../syntax/arith_expr/ class=md-tabs__link> Syntax </a> </li> <li class=md-tabs__item> <a href=../../tags/ class=md-tabs__link> Tags </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title="The Bash Hackers Wiki" class="md-nav__button md-logo" aria-label="The Bash Hackers Wiki" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> The Bash Hackers Wiki </label> <div class=md-nav__source> <a href=https://github.com/flokoe/bash-hackers-wiki title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> flokoe/bash-hackers-wiki </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> Start </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <label class=md-nav__link for=__nav_2 id=__nav_2_label tabindex=0> <span class=md-ellipsis> Commands </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Commands </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../commands/classictest/ class=md-nav__link> <span class=md-ellipsis> The classic test command </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2_2> <label class=md-nav__link for=__nav_2_2 id=__nav_2_2_label tabindex=0> <span class=md-ellipsis> Builtin </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2_2> <span class="md-nav__icon md-icon"></span> Builtin </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../commands/builtin/caller/ class=md-nav__link> <span class=md-ellipsis> The caller builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/cd/ class=md-nav__link> <span class=md-ellipsis> The cd builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/declare/ class=md-nav__link> <span class=md-ellipsis> The declare builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/echo/ class=md-nav__link> <span class=md-ellipsis> The echo builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/eval/ class=md-nav__link> <span class=md-ellipsis> The eval builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/exec/ class=md-nav__link> <span class=md-ellipsis> The exec builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/exit/ class=md-nav__link> <span class=md-ellipsis> The exit builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/export/ class=md-nav__link> <span class=md-ellipsis> The export builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/kill/ class=md-nav__link> <span class=md-ellipsis> The kill builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/let/ class=md-nav__link> <span class=md-ellipsis> The let builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/local/ class=md-nav__link> <span class=md-ellipsis> The local builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/mapfile/ class=md-nav__link> <span class=md-ellipsis> The mapfile builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/printf/ class=md-nav__link> <span class=md-ellipsis> The printf command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/read/ class=md-nav__link> <span class=md-ellipsis> The read builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/readonly/ class=md-nav__link> <span class=md-ellipsis> The readonly builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/return/ class=md-nav__link> <span class=md-ellipsis> The return builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/set/ class=md-nav__link> <span class=md-ellipsis> The set builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/shift/ class=md-nav__link> <span class=md-ellipsis> The shift builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/shopt/ class=md-nav__link> <span class=md-ellipsis> The shopt builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/trap/ class=md-nav__link> <span class=md-ellipsis> The trap builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/unset/ class=md-nav__link> <span class=md-ellipsis> The unset builtin command </span> </a> </li> <li class=md-nav__item> <a href=../../commands/builtin/wait/ class=md-nav__link> <span class=md-ellipsis> The wait builtin command </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex=0> <span class=md-ellipsis> Dict </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Dict </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../dict/directory/ class=md-nav__link> <span class=md-ellipsis> Directory </span> </a> </li> <li class=md-nav__item> <a href=../../dict/end_of_options/ class=md-nav__link> <span class=md-ellipsis> End of Options </span> </a> </li> <li class=md-nav__item> <a href=../../dict/exit_status/ class=md-nav__link> <span class=md-ellipsis> Exit Status </span> </a> </li> <li class=md-nav__item> <a href=../../dict/file/ class=md-nav__link> <span class=md-ellipsis> File </span> </a> </li> <li class=md-nav__item> <a href=../../dict/filetimes/ class=md-nav__link> <span class=md-ellipsis> File timestamp </span> </a> </li> <li class=md-nav__item> <a href=../../dict/globbing/ class=md-nav__link> <span class=md-ellipsis> Globbing </span> </a> </li> <li class=md-nav__item> <a href=../../dict/hardlink/ class=md-nav__link> <span class=md-ellipsis> Hardlink </span> </a> </li> <li class=md-nav__item> <a href=../../dict/interpreter_directive/ class=md-nav__link> <span class=md-ellipsis> Interpreter Directive </span> </a> </li> <li class=md-nav__item> <a href=../../dict/parameter/ class=md-nav__link> <span class=md-ellipsis> Parameter </span> </a> </li> <li class=md-nav__item> <a href=../../dict/posix/ class=md-nav__link> <span class=md-ellipsis> POSIX </span> </a> </li> <li class=md-nav__item> <a href=../../dict/shell/ class=md-nav__link> <span class=md-ellipsis> Shell </span> </a> </li> <li class=md-nav__item> <a href=../../dict/special_file/ class=md-nav__link> <span class=md-ellipsis> Special file </span> </a> </li> <li class=md-nav__item> <a href=../../dict/symlink/ class=md-nav__link> <span class=md-ellipsis> Symlink </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex=0> <span class=md-ellipsis> Howto </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Howto </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../howto/calculate-dc/ class=md-nav__link> <span class=md-ellipsis> Calculating with dc </span> </a> </li> <li class=md-nav__item> <a href=../../howto/collapsing_functions/ class=md-nav__link> <span class=md-ellipsis> Collapsing Functions </span> </a> </li> <li class=md-nav__item> <a href=../../howto/conffile/ class=md-nav__link> <span class=md-ellipsis> Config files for your script </span> </a> </li> <li class=md-nav__item> <a href=../../howto/dissectabadoneliner/ class=md-nav__link> <span class=md-ellipsis> Dissect a bad oneliner </span> </a> </li> <li class=md-nav__item> <a href=../../howto/edit-ed/ class=md-nav__link> <span class=md-ellipsis> Editing files via scripts with ed </span> </a> </li> <li class=md-nav__item> <a href=../../howto/getopts_tutorial/ class=md-nav__link> <span class=md-ellipsis> Small getopts tutorial </span> </a> </li> <li class=md-nav__item> <a href=../../howto/mutex/ class=md-nav__link> <span class=md-ellipsis> Lock your script (against parallel execution) </span> </a> </li> <li class=md-nav__item> <a href=../../howto/pax/ class=md-nav__link> <span class=md-ellipsis> pax - the POSIX archiver </span> </a> </li> <li class=md-nav__item> <a href=../../howto/redirection_tutorial/ class=md-nav__link> <span class=md-ellipsis> Illustrated Redirection Tutorial </span> </a> </li> <li class=md-nav__item> <a href=../../howto/testing-your-scripts/ class=md-nav__link> <span class=md-ellipsis> Testing your scripts </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex=0> <span class=md-ellipsis> Internals </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Internals </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../internals/shell_options/ class=md-nav__link> <span class=md-ellipsis> List of shell options </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <label class=md-nav__link for=__nav_6 id=__nav_6_label tabindex=0> <span class=md-ellipsis> Misc </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Misc </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../misc/bashphorisms/ class=md-nav__link> <span class=md-ellipsis> The Bashphorisms </span> </a> </li> <li class=md-nav__item> <a href=../../misc/readthesourceluke/ class=md-nav__link> <span class=md-ellipsis> Readthesourceluke </span> </a> </li> <li class=md-nav__item> <a href=../../misc/shell_humor/ class=md-nav__link> <span class=md-ellipsis> Shell Humor </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_7 checked> <label class=md-nav__link for=__nav_7 id=__nav_7_label tabindex> <span class=md-ellipsis> Scripting </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=true> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> Scripting </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../bashbehaviour/ class=md-nav__link> <span class=md-ellipsis> Bash's behaviour </span> </a> </li> <li class=md-nav__item> <a href=../bashchanges/ class=md-nav__link> <span class=md-ellipsis> Bash changes </span> </a> </li> <li class=md-nav__item> <a href=../basics/ class=md-nav__link> <span class=md-ellipsis> The basics of shell scripting </span> </a> </li> <li class=md-nav__item> <a href=../debuggingtips/ class=md-nav__link> <span class=md-ellipsis> Debugging a script </span> </a> </li> <li class=md-nav__item> <a href=../newbie_traps/ class=md-nav__link> <span class=md-ellipsis> Beginner Mistakes </span> </a> </li> <li class=md-nav__item> <a href=../nonportable/ class=md-nav__link> <span class=md-ellipsis> Portability talk </span> </a> </li> <li class=md-nav__item> <a href=../obsolete/ class=md-nav__link> <span class=md-ellipsis> Obsolete and deprecated syntax </span> </a> </li> <li class=md-nav__item> <a href=../posparams/ class=md-nav__link> <span class=md-ellipsis> Handling positional parameters </span> </a> </li> <li class=md-nav__item> <a href=../processtree/ class=md-nav__link> <span class=md-ellipsis> Bash and the process tree </span> </a> </li> <li class=md-nav__item> <a href=../style/ class=md-nav__link> <span class=md-ellipsis> Scripting with style </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Terminal codes (ANSI/VT100) introduction </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Terminal codes (ANSI/VT100) introduction </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#how-it-technically-works class=md-nav__link> <span class=md-ellipsis> How it technically works </span> </a> </li> <li class=md-nav__item> <a href=#the-tput-command class=md-nav__link> <span class=md-ellipsis> The tput command </span> </a> </li> <li class=md-nav__item> <a href=#the-codes class=md-nav__link> <span class=md-ellipsis> The codes </span> </a> <nav class=md-nav aria-label="The codes"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#general-useful-ascii-codes class=md-nav__link> <span class=md-ellipsis> General useful ASCII codes </span> </a> </li> <li class=md-nav__item> <a href=#cursor-handling class=md-nav__link> <span class=md-ellipsis> Cursor handling </span> </a> </li> <li class=md-nav__item> <a href=#erasing-text class=md-nav__link> <span class=md-ellipsis> Erasing text </span> </a> </li> <li class=md-nav__item> <a href=#general-text-attributes class=md-nav__link> <span class=md-ellipsis> General text attributes </span> </a> </li> <li class=md-nav__item> <a href=#background-coloring class=md-nav__link> <span class=md-ellipsis> Background coloring </span> </a> </li> <li class=md-nav__item> <a href=#misc-codes class=md-nav__link> <span class=md-ellipsis> Misc codes </span> </a> <nav class=md-nav aria-label="Misc codes"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#saverestore-screen class=md-nav__link> <span class=md-ellipsis> Save/restore screen </span> </a> </li> <li class=md-nav__item> <a href=#additional-colors class=md-nav__link> <span class=md-ellipsis> Additional colors </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#bash-examples class=md-nav__link> <span class=md-ellipsis> Bash examples </span> </a> <nav class=md-nav aria-label="Bash examples"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#hardcoded-colors class=md-nav__link> <span class=md-ellipsis> Hardcoded colors </span> </a> </li> <li class=md-nav__item> <a href=#colors-using-tput class=md-nav__link> <span class=md-ellipsis> Colors using tput </span> </a> </li> <li class=md-nav__item> <a href=#misc class=md-nav__link> <span class=md-ellipsis> Misc </span> </a> </li> <li class=md-nav__item> <a href=#silly-but-nice-effect class=md-nav__link> <span class=md-ellipsis> Silly but nice effect </span> </a> </li> <li class=md-nav__item> <a href=#mandelbrot-set class=md-nav__link> <span class=md-ellipsis> Mandelbrot set </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_8> <label class=md-nav__link for=__nav_8 id=__nav_8_label tabindex=0> <span class=md-ellipsis> Snipplets </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> Snipplets </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../snipplets/ class=md-nav__link> <span class=md-ellipsis> Small code snipplets </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/add_color_to_your_scripts/ class=md-nav__link> <span class=md-ellipsis> Add Color to your scripts </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/awkcsv/ class=md-nav__link> <span class=md-ellipsis> Using awk to deal with CSV that uses quoted/unquoted delimiters </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/filesize/ class=md-nav__link> <span class=md-ellipsis> Show size of a file </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/kill_bg_job_without_message/ class=md-nav__link> <span class=md-ellipsis> Kill a background job without a message </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/largestfile/ class=md-nav__link> <span class=md-ellipsis> Get largest file </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/pause_command/ class=md-nav__link> <span class=md-ellipsis> Pausing a script (like MSDOS pause command) </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/prargs/ class=md-nav__link> <span class=md-ellipsis> Print argument list for testing </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/print_horizontal_line/ class=md-nav__link> <span class=md-ellipsis> Print a horizontal line </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/rndstr/ class=md-nav__link> <span class=md-ellipsis> Print a random string or select random elements </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/screen_saverestore/ class=md-nav__link> <span class=md-ellipsis> Save and restore terminal/screen content </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/ssh_fetchkeys/ class=md-nav__link> <span class=md-ellipsis> Fetching SSH hostkeys without interaction </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/ssh_local_var/ class=md-nav__link> <span class=md-ellipsis> Run some bash commands with SSH remotely using local variables </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/wrapperargs/ class=md-nav__link> <span class=md-ellipsis> Generate code with own arguments properly quoted </span> </a> </li> <li class=md-nav__item> <a href=../../snipplets/xclip/ class=md-nav__link> <span class=md-ellipsis> X-Clipboard on Commandline </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex=0> <span class=md-ellipsis> Syntax </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> Syntax </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../syntax/arith_expr/ class=md-nav__link> <span class=md-ellipsis> Arithmetic expressions </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/arrays/ class=md-nav__link> <span class=md-ellipsis> Arrays </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/basicgrammar/ class=md-nav__link> <span class=md-ellipsis> Basic grammar rules of Bash </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/pattern/ class=md-nav__link> <span class=md-ellipsis> Patterns and pattern matching </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/pe/ class=md-nav__link> <span class=md-ellipsis> Parameter expansion </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/quoting/ class=md-nav__link> <span class=md-ellipsis> Quotes and escaping </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/redirection/ class=md-nav__link> <span class=md-ellipsis> Redirection </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/shellvars/ class=md-nav__link> <span class=md-ellipsis> Special parameters and shell variables </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/words/ class=md-nav__link> <span class=md-ellipsis> Words... </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9_10> <label class=md-nav__link for=__nav_9_10 id=__nav_9_10_label tabindex=0> <span class=md-ellipsis> Ccmd </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_9_10_label aria-expanded=false> <label class=md-nav__title for=__nav_9_10> <span class="md-nav__icon md-icon"></span> Ccmd </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../syntax/ccmd/arithmetic_eval/ class=md-nav__link> <span class=md-ellipsis> Arithmetic evaluation (command) </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/c_for/ class=md-nav__link> <span class=md-ellipsis> The C-style for-loop </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/case/ class=md-nav__link> <span class=md-ellipsis> The case statement </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/classic_for/ class=md-nav__link> <span class=md-ellipsis> The classic for-loop </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/conditional_expression/ class=md-nav__link> <span class=md-ellipsis> The conditional expression </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/grouping_plain/ class=md-nav__link> <span class=md-ellipsis> Grouping commands </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/grouping_subshell/ class=md-nav__link> <span class=md-ellipsis> Grouping commands in a subshell </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/if_clause/ class=md-nav__link> <span class=md-ellipsis> The if-clause </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/intro/ class=md-nav__link> <span class=md-ellipsis> Bash compound commands </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/until_loop/ class=md-nav__link> <span class=md-ellipsis> The until loop </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/user_select/ class=md-nav__link> <span class=md-ellipsis> User selections </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/ccmd/while_loop/ class=md-nav__link> <span class=md-ellipsis> The while-loop </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9_11> <label class=md-nav__link for=__nav_9_11 id=__nav_9_11_label tabindex=0> <span class=md-ellipsis> Expansion </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_9_11_label aria-expanded=false> <label class=md-nav__title for=__nav_9_11> <span class="md-nav__icon md-icon"></span> Expansion </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../syntax/expansion/arith/ class=md-nav__link> <span class=md-ellipsis> Arithmetic expansion </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/expansion/brace/ class=md-nav__link> <span class=md-ellipsis> Brace expansion </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/expansion/cmdsubst/ class=md-nav__link> <span class=md-ellipsis> Command substitution </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/expansion/globs/ class=md-nav__link> <span class=md-ellipsis> Pathname expansion (globbing) </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/expansion/intro/ class=md-nav__link> <span class=md-ellipsis> Expansions and substitutions </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/expansion/proc_subst/ class=md-nav__link> <span class=md-ellipsis> Process substitution </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/expansion/tilde/ class=md-nav__link> <span class=md-ellipsis> Tilde expansion </span> </a> </li> <li class=md-nav__item> <a href=../../syntax/expansion/wordsplit/ class=md-nav__link> <span class=md-ellipsis> Word splitting </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9_12> <label class=md-nav__link for=__nav_9_12 id=__nav_9_12_label tabindex=0> <span class=md-ellipsis> Grammar </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_9_12_label aria-expanded=false> <label class=md-nav__title for=__nav_9_12> <span class="md-nav__icon md-icon"></span> Grammar </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../syntax/grammar/parser_exec/ class=md-nav__link> <span class=md-ellipsis> Parser exec </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_9_13> <label class=md-nav__link for=__nav_9_13 id=__nav_9_13_label tabindex=0> <span class=md-ellipsis> Keywords </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_9_13_label aria-expanded=false> <label class=md-nav__title for=__nav_9_13> <span class="md-nav__icon md-icon"></span> Keywords </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../syntax/keywords/coproc/ class=md-nav__link> <span class=md-ellipsis> The coproc keyword </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../../tags/ class=md-nav__link> <span class=md-ellipsis> Tags </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#how-it-technically-works class=md-nav__link> <span class=md-ellipsis> How it technically works </span> </a> </li> <li class=md-nav__item> <a href=#the-tput-command class=md-nav__link> <span class=md-ellipsis> The tput command </span> </a> </li> <li class=md-nav__item> <a href=#the-codes class=md-nav__link> <span class=md-ellipsis> The codes </span> </a> <nav class=md-nav aria-label="The codes"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#general-useful-ascii-codes class=md-nav__link> <span class=md-ellipsis> General useful ASCII codes </span> </a> </li> <li class=md-nav__item> <a href=#cursor-handling class=md-nav__link> <span class=md-ellipsis> Cursor handling </span> </a> </li> <li class=md-nav__item> <a href=#erasing-text class=md-nav__link> <span class=md-ellipsis> Erasing text </span> </a> </li> <li class=md-nav__item> <a href=#general-text-attributes class=md-nav__link> <span class=md-ellipsis> General text attributes </span> </a> </li> <li class=md-nav__item> <a href=#background-coloring class=md-nav__link> <span class=md-ellipsis> Background coloring </span> </a> </li> <li class=md-nav__item> <a href=#misc-codes class=md-nav__link> <span class=md-ellipsis> Misc codes </span> </a> <nav class=md-nav aria-label="Misc codes"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#saverestore-screen class=md-nav__link> <span class=md-ellipsis> Save/restore screen </span> </a> </li> <li class=md-nav__item> <a href=#additional-colors class=md-nav__link> <span class=md-ellipsis> Additional colors </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#bash-examples class=md-nav__link> <span class=md-ellipsis> Bash examples </span> </a> <nav class=md-nav aria-label="Bash examples"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#hardcoded-colors class=md-nav__link> <span class=md-ellipsis> Hardcoded colors </span> </a> </li> <li class=md-nav__item> <a href=#colors-using-tput class=md-nav__link> <span class=md-ellipsis> Colors using tput </span> </a> </li> <li class=md-nav__item> <a href=#misc class=md-nav__link> <span class=md-ellipsis> Misc </span> </a> </li> <li class=md-nav__item> <a href=#silly-but-nice-effect class=md-nav__link> <span class=md-ellipsis> Silly but nice effect </span> </a> </li> <li class=md-nav__item> <a href=#mandelbrot-set class=md-nav__link> <span class=md-ellipsis> Mandelbrot set </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <nav class=md-tags> <a href=../../tags/#bash class=md-tag>bash</a> <a href=../../tags/#shell class=md-tag>shell</a> <a href=../../tags/#scripting class=md-tag>scripting</a> <a href=../../tags/#colors class=md-tag>colors</a> <a href=../../tags/#cursor class=md-tag>cursor</a> <a href=../../tags/#control class=md-tag>control</a> <a href=../../tags/#vt100 class=md-tag>vt100</a> <a href=../../tags/#ansi class=md-tag>ansi</a> </nav> <a href=https://github.com/flokoe/bash-hackers-wiki/edit/main/docs/scripting/terminalcodes.md title="Edit this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg> </a> <a href=https://github.com/flokoe/bash-hackers-wiki/raw/main/docs/scripting/terminalcodes.md title="View source of this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <h1 id=terminal-codes-ansivt100-introduction>Terminal codes (ANSI/VT100) introduction<a class=headerlink href=#terminal-codes-ansivt100-introduction title="Permanent link">&para;</a></h1> <p>Terminal (control) codes are used to issue specific commands to your terminal. This can be related to switching colors or positioning the cursor, i.e. anything that can't be done by the application itself.</p> <h2 id=how-it-technically-works>How it technically works<a class=headerlink href=#how-it-technically-works title="Permanent link">&para;</a></h2> <p>A terminal control code is a special sequence of characters that is printed (like any other text). If the terminal understands the code, it won't display the character-sequence, but will perform some action. You can print the codes with a simple <code>echo</code> command.</p> <p><u><strong>Note:</strong></u> I see codes referenced as "Bash colors" sometimes (several "Bash tutorials" etc...): That's a completely incorrect definition.</p> <h2 id=the-tput-command>The tput command<a class=headerlink href=#the-tput-command title="Permanent link">&para;</a></h2> <p>Because there's a large number of different terminal control languages, usually a system has an intermediate communication layer. The real codes are looked up in a database <strong>for the currently detected terminal type</strong> and you give standardized requests to an API or (from the shell) to a command.</p> <p>One of these commands is <code>tput</code>. Tput accepts a set of acronyms called <em>capability names</em> and any parameters, if appropriate, then looks up the correct escape sequences for the detected terminal in the <code>terminfo</code> database and prints the correct codes (the terminal hopefully understands).</p> <h2 id=the-codes>The codes<a class=headerlink href=#the-codes title="Permanent link">&para;</a></h2> <p>In this list I'll focus on ANSI/VT100 control codes for the most common actions - take it as quick reference. The documentation of your terminal or the <code>terminfo</code> database is always the preferred source when something is unclear! Also the <code>tput</code> acronyms are usually the ones dedicated for ANSI escapes!</p> <p>I listed only the most relevant codes, of course, any ANSI terminal understands many more! But let's keep the discussion centered on common shell scripting ;-)</p> <p>If I couldn't find a matching ANSI escape, you'll see a :?: as the code. Feel free to mail me or fix it.</p> <p>The ANSI codes always start with the ESC character. (ASCII 0x1B or octal 033) This isn't part of the list, but <strong>you should avoid using the ANSI codes directly - use the <code>tput</code> command!</strong></p> <p>All codes that can be used with <code>tput</code> can be found in terminfo(5). (on OpenBSD at least) See <a href="http://www.openbsd.org/cgi-bin/man.cgi?query=terminfo&apropos=0&sektion=5&manpath=OpenBSD+Current&arch=i386&format=html">OpenBSD's terminfo(5)</a> under the <u>Capabilities</u> section. The <em>cap-name</em> is the code to use with tput. A description of each code is also provided.</p> <h3 id=general-useful-ascii-codes>General useful ASCII codes<a class=headerlink href=#general-useful-ascii-codes title="Permanent link">&para;</a></h3> <p>The <strong>Ctrl-Key</strong> representation is simply associating the non-printable characters from ASCII code 1 with the printable (letter) characters from ASCII code 65 ("A"). ASCII code 1 would be <code>^A</code> (Ctrl-A), while ASCII code 7 (BEL) would be <code>^G</code> (Ctrl-G). This is a common representation (and input method) and historically comes from one of the VT series of terminals.</p> <table> <thead> <tr> <th>Name</th> <th>decimal</th> <th>octal</th> <th>hex</th> <th>C-escape</th> <th>Ctrl-Key</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>BEL</code></td> <td>7</td> <td>007</td> <td>0x07</td> <td><code>\a</code></td> <td><code>^G</code></td> <td>Terminal bell</td> </tr> <tr> <td><code>BS</code></td> <td>8</td> <td>010</td> <td>0x08</td> <td><code>\b</code></td> <td><code>^H</code></td> <td>Backspace</td> </tr> <tr> <td><code>HT</code></td> <td>9</td> <td>011</td> <td>0x09</td> <td><code>\t</code></td> <td><code>^I</code></td> <td>Horizontal TAB</td> </tr> <tr> <td><code>LF</code></td> <td>10</td> <td>012</td> <td>0x0A</td> <td><code>\n</code></td> <td><code>^J</code></td> <td>Linefeed (newline)</td> </tr> <tr> <td><code>VT</code></td> <td>11</td> <td>013</td> <td>0x0B</td> <td><code>\v</code></td> <td><code>^K</code></td> <td>Vertical TAB</td> </tr> <tr> <td><code>FF</code></td> <td>12</td> <td>014</td> <td>0x0C</td> <td><code>\f</code></td> <td><code>^L</code></td> <td>Formfeed (also: New page <code>NP</code>)</td> </tr> <tr> <td><code>CR</code></td> <td>13</td> <td>015</td> <td>0x0D</td> <td><code>\r</code></td> <td><code>^M</code></td> <td>Carriage return</td> </tr> <tr> <td><code>ESC</code></td> <td>27</td> <td>033</td> <td>0x1B</td> <td><code>&lt;none&gt;</code></td> <td><code>^[</code></td> <td>Escape character</td> </tr> <tr> <td><code>DEL</code></td> <td>127</td> <td>177</td> <td>0x7F</td> <td><code>&lt;none&gt;</code></td> <td><code>&lt;none&gt;</code></td> <td>Delete character</td> </tr> </tbody> </table> <h3 id=cursor-handling>Cursor handling<a class=headerlink href=#cursor-handling title="Permanent link">&para;</a></h3> <hr> <p>ANSI terminfo equivalent Description</p> <hr> <p><code>[ &lt;X&gt; ; &lt;Y&gt; H</code>\ <code>cup &lt;X&gt; &lt;Y&gt;</code> Home-positioning to <code>X</code> and <code>Y</code> coordinates\ <code>[ &lt;X&gt; ; &lt;Y&gt; f</code> :!: it seems that ANSI uses 1-1 as home while <code>tput</code> uses 0-0</p> <p><code>[ H</code> <code>home</code> Move cursor to home position (0-0)</p> <p><code>7</code> <code>sc</code> Save current cursor position</p> <p><code>8</code> <code>rc</code> Restore saved cursor position</p> <p>:?: most likely a normal code like <code>\b</code> <code>cub1</code> move left one space (backspace)</p> <p>VT100 <code>[ ? 25 l</code> <code>civis</code> make cursor invisible</p> <p>VT100 <code>[ ? 25 h</code> <code>cvvis</code> make cursor visible</p> <hr> <h3 id=erasing-text>Erasing text<a class=headerlink href=#erasing-text title="Permanent link">&para;</a></h3> <hr> <p>ANSI terminfo equivalent Description</p> <hr> <p><code>[ K</code>\ <code>el</code> <strong>Clear line</strong> from current cursor position <strong>to end</strong> of line <code>[ 0 K</code></p> <p><code>[ 1 K</code> <code>el1</code> <strong>Clear line from beginning</strong> to current cursor position</p> <p><code>[ 2 K</code> <code>el2</code>:?: <strong>Clear whole line</strong> (cursor position unchanged)</p> <hr> <h3 id=general-text-attributes>General text attributes<a class=headerlink href=#general-text-attributes title="Permanent link">&para;</a></h3> <table> <thead> <tr> <th>ANSI</th> <th>terminfo equivalent</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>[ 0 m</code></td> <td><code>sgr0</code></td> <td>Reset all attributes</td> </tr> <tr> <td><code>[ 1 m</code></td> <td><code>bold</code></td> <td>Set "bright" attribute</td> </tr> <tr> <td><code>[ 2 m</code></td> <td><code>dim</code></td> <td>Set "dim" attribute</td> </tr> <tr> <td><code>[ 3 m</code></td> <td><code>smso</code></td> <td>Set "standout" attribute</td> </tr> <tr> <td><code>[ 4 m</code></td> <td>set <code>smul</code> unset <code>rmul</code> :?:</td> <td>Set "underscore" (underlined text) attribute</td> </tr> <tr> <td><code>[ 5 m</code></td> <td><code>blink</code></td> <td>Set "blink" attribute</td> </tr> <tr> <td><code>[ 7 m</code></td> <td><code>rev</code></td> <td>Set "reverse" attribute</td> </tr> <tr> <td><code>[ 8 m</code></td> <td><code>invis</code></td> <td>Set "hidden" attribute</td> </tr> <tr> <td>### Foreground coloring</td> <td></td> <td></td> </tr> </tbody> </table> <table> <thead> <tr> <th>ANSI</th> <th>terminfo equivalent</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>[ 3 0 m</code></td> <td><code>setaf 0</code></td> <td>Set <strong>foreground</strong> to color #0 - <strong>black</strong></td> </tr> <tr> <td><code>[ 3 1 m</code></td> <td><code>setaf 1</code></td> <td>Set <strong>foreground</strong> to color #1 - <strong>red</strong></td> </tr> <tr> <td><code>[ 3 2 m</code></td> <td><code>setaf 2</code></td> <td>Set <strong>foreground</strong> to color #2 - <strong>green</strong></td> </tr> <tr> <td><code>[ 3 3 m</code></td> <td><code>setaf 3</code></td> <td>Set <strong>foreground</strong> to color #3 - <strong>yellow</strong></td> </tr> <tr> <td><code>[ 3 4 m</code></td> <td><code>setaf 4</code></td> <td>Set <strong>foreground</strong> to color #4 - <strong>blue</strong></td> </tr> <tr> <td><code>[ 3 5 m</code></td> <td><code>setaf 5</code></td> <td>Set <strong>foreground</strong> to color #5 - <strong>magenta</strong></td> </tr> <tr> <td><code>[ 3 6 m</code></td> <td><code>setaf 6</code></td> <td>Set <strong>foreground</strong> to color #6 - <strong>cyan</strong></td> </tr> <tr> <td><code>[ 3 7 m</code></td> <td><code>setaf 7</code></td> <td>Set <strong>foreground</strong> to color #7 - <strong>white</strong></td> </tr> <tr> <td><code>[ 3 9 m</code></td> <td><code>setaf 9</code></td> <td>Set <strong>default</strong> color as foreground color</td> </tr> </tbody> </table> <h3 id=background-coloring>Background coloring<a class=headerlink href=#background-coloring title="Permanent link">&para;</a></h3> <table> <thead> <tr> <th>ANSI</th> <th>terminfo equivalent</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>[ 4 0 m</code></td> <td><code>setab 0</code></td> <td>Set <strong>background</strong> to color #0 - <strong>black</strong></td> </tr> <tr> <td><code>[ 4 1 m</code></td> <td><code>setab 1</code></td> <td>Set <strong>background</strong> to color #1 - <strong>red</strong></td> </tr> <tr> <td><code>[ 4 2 m</code></td> <td><code>setab 2</code></td> <td>Set <strong>background</strong> to color #2 - <strong>green</strong></td> </tr> <tr> <td><code>[ 4 3 m</code></td> <td><code>setab 3</code></td> <td>Set <strong>background</strong> to color #3 - <strong>yellow</strong></td> </tr> <tr> <td><code>[ 4 4 m</code></td> <td><code>setab 4</code></td> <td>Set <strong>background</strong> to color #4 - <strong>blue</strong></td> </tr> <tr> <td><code>[ 4 5 m</code></td> <td><code>setab 5</code></td> <td>Set <strong>background</strong> to color #5 - <strong>magenta</strong></td> </tr> <tr> <td><code>[ 4 6 m</code></td> <td><code>setab 6</code></td> <td>Set <strong>background</strong> to color #6 - <strong>cyan</strong></td> </tr> <tr> <td><code>[ 4 7 m</code></td> <td><code>setab 7</code></td> <td>Set <strong>background</strong> to color #7 - <strong>white</strong></td> </tr> <tr> <td><code>[ 4 9 m</code></td> <td><code>setab 9</code></td> <td>Set <strong>default</strong> color as background color</td> </tr> </tbody> </table> <h3 id=misc-codes>Misc codes<a class=headerlink href=#misc-codes title="Permanent link">&para;</a></h3> <h4 id=saverestore-screen>Save/restore screen<a class=headerlink href=#saverestore-screen title="Permanent link">&para;</a></h4> <p>Used capabilities: <code>smcup</code>, <code>rmcup</code></p> <p>You've undoubtedly already encountered programs that restore the terminal contents after they do their work (like <code>vim</code>). This can be done by the following commands:</p> <div class=highlight><pre><span></span><code># save, clear screen
tput smcup
clear
# example &quot;application&quot; follows...
read -n1 -p &quot;Press any key to continue...&quot;
# example &quot;application&quot; ends here
# restore
tput rmcup
</code></pre></div> <p>These features require that certain capabilities exist in your termcap/terminfo. While <code>xterm</code> and most of its clones (<code>rxvt</code>, <code>urxvt</code>, etc) will support the instructions, your operating system may not include references to them in its default xterm profile. (FreeBSD, in particular, falls into this category.) If <code>tput smcup</code> appears to do nothing for you, and you don't want to modify your system termcap/terminfo data, and you KNOW that you are using a compatible xterm application, the following may work for you:</p> <div class=highlight><pre><span></span><code>echo -e &#39;\033[?47h&#39; # save screen
echo -e &#39;\033[?47l&#39; # restore screen
</code></pre></div> <p>Certain software uses these codes (via their termcap capabilities) as well. You may have seen the screen save/restore in <code>less</code>, <code>vim</code>, <code>top</code>, <code>screen</code> and others. Some of these applications may also provide configuration options to <em>disable</em> this behaviour. For example, <code>less</code> has a <code>-X</code> option for this, which can also be set in an environment variable:</p> <div class=highlight><pre><span></span><code>export LESS=X
less /path/to/file
</code></pre></div> <p>Similarly, <code>vim</code> can be configured not to "restore" the screen by adding the following to your <code>~/.vimrc</code>:</p> <div class=highlight><pre><span></span><code>set t_ti= t_te=
</code></pre></div> <h4 id=additional-colors>Additional colors<a class=headerlink href=#additional-colors title="Permanent link">&para;</a></h4> <p>Some terminal emulators support additional colors. The most common extension used by xterm-compatible terminals supports 256 colors. These can be generated by <code>tput</code> with <code>seta{f,b} [0-255]</code> when the <code>TERM</code> value has a <code>-256color</code> suffix. <a href=https://gist.github.com/XVilka/8346728#now-supporting-truecolour>Some terminals</a> also support full 24-bit colors, and any X11 color code can be written directly into a special escape sequence. (<a href=https://gist.github.com/XVilka/8346728>More infos</a>) Only a few programs make use of anything beyond 256 colors, and tput doesn't know about them. Colors beyond 16 usually only apply to modern terminal emulators running in graphical environments.</p> <p>The Virtual Terminal implemented in the Linux kernel supports only 16 colors, and the usual default terminfo entry for <code>TERM=linux</code> defines only 8. There is sometimes an alternate "linux-16color" that you can switch to, to get the other 8 colors.</p> <h2 id=bash-examples>Bash examples<a class=headerlink href=#bash-examples title="Permanent link">&para;</a></h2> <h3 id=hardcoded-colors>Hardcoded colors<a class=headerlink href=#hardcoded-colors title="Permanent link">&para;</a></h3> <div class=highlight><pre><span></span><code>printf &#39;%b\n&#39; &#39;It is \033[31mnot\033[39m intelligent to use \033[32mhardcoded ANSI\033[39m codes!&#39;
</code></pre></div> <h3 id=colors-using-tput>Colors using tput<a class=headerlink href=#colors-using-tput title="Permanent link">&para;</a></h3> <p><u>Directly inside the echo:</u></p> <div class=highlight><pre><span></span><code>echo &quot;TPUT is a $(tput setaf 2)nice$(tput setaf 9) and $(tput setaf 5)user friendly$(tput setaf 9) terminal capability database.&quot;
</code></pre></div> <p><u>With preset variables:</u></p> <div class=highlight><pre><span></span><code>COL_NORM=&quot;$(tput setaf 9)&quot;
COL_RED=&quot;$(tput setaf 1)&quot;
COL_GREEN=&quot;$(tput setaf 2)&quot;
echo &quot;It&#39;s ${COL_RED}red${COL_NORM} and ${COL_GREEN}green${COL_NORM} - have you seen?&quot;
</code></pre></div> <h3 id=misc>Misc<a class=headerlink href=#misc title="Permanent link">&para;</a></h3> <p><u>HOME function</u></p> <div class=highlight><pre><span></span><code>home() {
# yes, actually not much shorter ;-)
tput home
}
</code></pre></div> <h3 id=silly-but-nice-effect>Silly but nice effect<a class=headerlink href=#silly-but-nice-effect title="Permanent link">&para;</a></h3> <div class=highlight><pre><span></span><code>#!/bin/bash
DATA[0]=&quot; _/ _/ _/ _/ &quot;
DATA[1]=&quot; _/_/_/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/_/ &quot;
DATA[2]=&quot; _/ _/ _/ _/ _/ _/ _/_/ _/ _/&quot;
DATA[3]=&quot;_/_/_/_/_/ _/ _/ _/ _/ _/_/ _/ _/ &quot;
DATA[4]=&quot; _/ _/ _/_/_/ _/_/_/ _/_/_/ _/ _/ &quot;
# virtual coordinate system is X*Y ${#DATA} * 5
REAL_OFFSET_X=0
REAL_OFFSET_Y=0
draw_char() {
V_COORD_X=$1
V_COORD_Y=$2
tput cup $((REAL_OFFSET_Y + V_COORD_Y)) $((REAL_OFFSET_X + V_COORD_X))
printf %c ${DATA[V_COORD_Y]:V_COORD_X:1}
}
trap &#39;exit 1&#39; INT TERM
trap &#39;tput setaf 9; tput cvvis; clear&#39; EXIT
tput civis
clear
while :; do
for ((c=1; c &lt;= 7; c++)); do
tput setaf $c
for ((x=0; x&lt;${#DATA[0]}; x++)); do
for ((y=0; y&lt;=4; y++)); do
draw_char $x $y
done
done
done
done
</code></pre></div> <h3 id=mandelbrot-set>Mandelbrot set<a class=headerlink href=#mandelbrot-set title="Permanent link">&para;</a></h3> <p>This is a slightly modified version of Charles Cooke's colorful Mandelbrot plot scripts (<a href=http://earth.gkhs.net/ccooke/shell.html>original w/ screenshot</a>) -- ungolfed, optimized a bit, and without hard-coded terminal escapes. The <code>colorBox</code> function is <a href=http://en.wikipedia.org/wiki/Memoization>memoized</a> to collect <code>tput</code> output only when required and output a new escape only when a color change is needed. This limits the number of <code>tput</code> calls to at most 16, and reduces raw output by more than half. The <code>doBash</code> function uses integer arithmetic, but is still ksh93-compatible (run as e.g. <code>bash ./mandelbrot</code> to use it). The ksh93-only floating-point <code>doKsh</code> is almost 10x faster than <code>doBash</code> (thus the ksh shebang by default), but uses only features that don't make the Bash parser crash.</p> <div class=highlight><pre><span></span><code>#!/usr/bin/env ksh
# Charles Cooke&#39;s 16-color Mandelbrot
# http://earth.gkhs.net/ccooke/shell.html
# Combined Bash/ksh93 flavors by Dan Douglas (ormaaj)
function doBash {
typeset P Q X Y a b c i v x y
for ((P=10**8,Q=P/100,X=320*Q/cols,Y=210*Q/lines,y=-105*Q,v=-220*Q,x=v;y&lt;105*Q;x=v,y+=Y)); do
for ((;x&lt;P;a=b=i=c=0,x+=X)); do
for ((;a**2+b**2&lt;4*P**2&amp;&amp;i++&lt;99;a=((c=a)**2-b**2)/P+x,b=2*c*b/P+y)); do :
done
colorBox $((i&lt;99?i%16:0))
done
echo
done
}
function doKsh {
integer i
float a b c x=2.2 y=-1.05 X=3.2/cols Y=2.1/lines
while
for ((a=b=i=0;(c=a)**2+b**2&lt;=2&amp;&amp;i++&lt;99&amp;&amp;(a=a**2-b**2+x,b=2*c*b+y);)); do :
done
. colorBox $((i&lt;99?i%16:0))
if ((x&lt;1?!(x+=X):(y+=Y,x=-2.2))); then
print
((y&lt;1.05))
fi
do :
done
}
function colorBox {
(($1==lastclr)) || printf %s &quot;${colrs[lastclr=$1]:=$(tput setaf &quot;$1&quot;)}&quot;
printf &#39;\u2588&#39;
}
unset -v lastclr
((cols=$(tput cols)-1, lines=$(tput lines)))
typeset -a colrs
trap &#39;tput sgr0; echo&#39; EXIT
${KSH_VERSION+. doKsh} ${BASH_VERSION+doBash}
</code></pre></div> <p>A much more sophisticated version by Roland Mainz can be found <a href=http://svn.nrubsig.org/svn/people/gisburn/scripts/mandelbrotset1.sh>here</a></p> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">November 7, 2024</span> </span> <span class=md-source-file__fact> <span class=md-icon title=Created> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">November 7, 2024</span> </span> </aside> <h2 id=__comments>Comments</h2> <script src=https://giscus.app/client.js data-repo=flokoe/bash-hackers-wiki data-repo-id=R_kgDOJ3Nr6Q data-category="Giscus Page Comments" data-category-id=DIC_kwDOJ3Nr6c4CXq9t data-mapping=pathname data-strict=1 data-reactions-enabled=1 data-emit-metadata=0 data-input-position=top data-theme=preferred_color_scheme data-lang=en data-loading=lazy crossorigin=anonymous async>
</script> <script>
var giscus = document.querySelector("script[src*=giscus]")
/* Set palette on initial load */
var palette = __md_get("__palette")
if (palette && typeof palette.color === "object") {
var theme = palette.color.scheme === "slate" ? "dark" : "light"
giscus.setAttribute("data-theme", theme)
}
/* Register event handlers after documented loaded */
document.addEventListener("DOMContentLoaded", function() {
var ref = document.querySelector("[data-md-component=palette]")
ref.addEventListener("change", function() {
var palette = __md_get("__palette")
if (palette && typeof palette.color === "object") {
var theme = palette.color.scheme === "slate" ? "dark" : "light"
/* Instruct Giscus to change theme */
var frame = document.querySelector(".giscus-frame")
frame.contentWindow.postMessage(
{ giscus: { setConfig: { theme } } },
"https://giscus.app"
)
}
})
})
</script> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <script id=__config type=application/json>{"base": "../..", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.sections", "navigation.top", "content.action.view", "content.action.edit", "search.suggest", "search.highlight", "content.code.copy"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src=../../assets/javascripts/bundle.83f73b43.min.js></script> </body> </html>