You are currently viewing Värit bashin komentokehotteeseen

Värit bashin komentokehotteeseen

Minulla oli useampi shell auki, eri koneilla. Jossain vaiheessa asensin paketteja koneeseen, johon ei pitänyt. Jokainen ikkuna on samanlainen, joten ainoa ero löytyy komentokehoitteen host-osasta. Ei sitä huomaa. Sillä kertaa ei tullut suurempaa vahinkoa, mutta kerran poistin hakemiston serveriltä, josta sitä ei olisi saanut poistaa. Sama syy, liian samanlaiset bashin ikkunat.

Helpoin tapa erottaa koneet toisistaan on värien käyttö. Jokainen eri värillä. Ei sekään mikään aukoton systeemi ole, jos tekee saman aikaan töitä eri puolilla ja lihasmuisti ei tiedä ollaako menossa punaiseen vai vihreään – mutta on se silti helpommin erotettavissa kuin pelkkä host.

PuTTY – ja monet muutkin – mahdollistavat erilaisen värimaailman. Mutta siinä säädetään koko ikkunan värejä, enkä kuitenkaan halua säätää tausta ja tekstin värejä. Ne ovat minulle sopivia eikä ergonomia saa olla IP-osoitteen mukaan muuttuva. Joten ratkaisuni oli sama kuin tuhansilla ennen minua: vaihdetaan vain komentokehoitteen alun värimaailma.

 

 

Komentokehotteen muoto

Komentokehoitteen ulkoasu asetetaan tiedostossa ~/.bashrc mutta nopeimmin käytössä olevan muotoilurivin saa näkyviin komennolla echo $PS1 ja vastaus on jotakuinkin tämän näköistä, tai ainakin Ubuntussa on:

${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

Kun karsitaan pois kaikki se, joka ei varsinaisesti kuulu muotoiluun, niin se joka määrää miltä oletuksena bashin komentokehote shellissä näyttää, typistyy tähän:

\u@\h:\w\$

 

Tuo melkoisen kryptinen rivi sisältää muotoiluohjeita, jotka on kaikki merkitty escape merkillä \ (mikä escapen käännös voisi olla) eli merkillä, joka tässä tapauksessa tarkoittaa, että seuraavaa merkkiä ei kohdella kuin tavallista merkkiä. Eli jos siellä olisi pelkkä h niin komentorivillä näkyisi myös pelkkä h. Mutta kun se on \h niin komentorivillä näkyy host nimi ensimmäiseen pisteeseen saakka – eli jos host name olisi eksis.one niin \h näyttäisi eksis.

  • Escape voi toimia myös toisinpäin eli kertoo, että merkki tosiaankin on vain merkki, eikä liity syntaksiin, komentoihin tai muuhun erikoiseen.

Komentokehoitteita on erilaisia eri tarkoituksiin – muistaakseni niitä on neljä. Se varsinainen shellissä näkyvä kehoite merkitään PS1. Jos komennon jälkeen halutaan lisää tietoa, niin se on PS2. En tiedä mihin muita käytetään ja nyt minulle riittää tieto, että se mitä haluan muokata, on nimenomaan PS1.

Tärkeimmät komennot ovat:

[table id=3 /]

 

Muotoiluun kuuluvat myös värit ja nekin ilmoitetaan koodeina. Ei niitä monen montaa ole, mutta näillä mennään:

[table id=4 /]

Komentokehoitteen rakentaminen

Ennen kuin tehdään mitään, niin otetaan nykyinen talteen, Komenna:

vanhaps1="$PS1"

Jos saat bashin kehotteen pahasti solmuun tai haluat muuten palata nopeasti takaisin vanhaan, niin komento on:

PS1="$vanhaps1"

Niin kauan kun et muuta mitään ~/.bashrc tiedostossa, niin mikään muutos ei ole pysyvä. Kun kirjaudut ulos, niin seuraavalla kerralla palatessasi kaikki on entisellään.

Tuossakin on koukku. Ei se palauttaminen sitten enää onnistu, kun on kertaalleen poistunut bashista. Joten jos haluaa olla varman puolella, niin ottaa PS1-määritykset kokonaan talteen. Tai kopioi tästä:

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

 

Uusi Ja Parempi bashin komentokehote otetaan aina käyttöön muodossa export PS1="[kaikenlaista]" – joten tuossa kehikossa aletaan rakentamaan.

Haluan tästä:

root@eksis:~#

tällaisen:

[21:23:53] root@eksis:~$

Se mitä aletaan muokkaamaan, on suoraan .bashrc tiedoston tarjoama:

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Tuota voisi lähteä koostamaan tyhjästäkin, mutta silloin en saanut koskaan rootia ja käyttäjää kuvaavia # ja $ merkkejä toimimaan. Kun otin pohjaksi oletuksen, niin toimi. Kaipa se jotenkin liittyy debian_chroot kohtiin.

  • kellonaika on \t ja siihen hakasulkeet ympärille: [\t]
  • käyttäjätunnus \u ja siihen perään tuleva @ on jo: \u@
  • eksis on host nimi \h mutta vaihdan sen FQDN muotoon \H:
  • työhakemiston polku \w on jo paikallaan
  • kuten myös # ja $ arpova \$
  • kannattaa huomata lopussa oleva välilyönti

Joten ilman värejä ollaan päästy jo näin pitkälle:

export PS1='${debian_chroot:+($debian_chroot)}[\t] \u@\H:\w\$ '

 

Lisätään väri mukaan. Käytän vihreää.

  • ensin annetaan näkymättömän merkin, tässä värin, aloitus \e[
  • annetaan väri 0;32 heti aloitusmerkin jälkeen. Värikoodin perään tarvitaan m (ei hajuakaan miksi): 0;32m
  • ja värin käyttö lopetetaan merkkiin \e[m joka sekään ei ole mikä pitäisi, mutta noin toimii

Nyt kehote on kokonaan vihreä:

export PS1='${debian_chroot:+($debian_chroot)}\e[0;32m[\t] \u@\H:\w\$\e[m '

 

Liikun pääsääntöisesti joka paikassa root-tunnuksella, mutta omista syistäni johtuen kirjaudun Raspberryyn tavallisella käyttäjätunnuksella ja kun tarvitsen rootin oikeuksia, eli melkoisen usein, niin käytän komentoa sudo -s – sama lopputulos sillä on kuin kirjautua suoraan rootina.

Rootille ja käyttäjälle on tietysti tehtävissä erilainen komentokehote. Puhtaasti vain siksi, että pystyin, niin tein pienen pienen sävymuokkauksen Raspberryssä rootin kehotteeseen ja laitoin root@host kohdan punaisella:

export PS1='${debian_chroot:+($debian_chroot)}\e[0;36m[\t]\e[m \e[0;31m\u@\H\e[m\e[0;36m:\w\$\e[m '

[01:29:12] root@ubuntu:/home/jagster#

Muutosten tallennus

Kuten aina linuxeissa, niin muutokset voi tallentaa useampaankin paikkaan ja ne sitten toimivat tai lakkaavat toimimasta sen mukaan missä ollaan ja mitä tehdään. Useat ohjeet neuvovat ~/.bash_profile mutta isot pojat neuvovat laittamaan sen suoraan ~/.bashrc tiedostoon. Ehkä se kannattaa laittaa sinne, joten oikea sijoituspaikka koko export-alkuiselle rotlalle lienee tiedoston loppu.

 

Jakke Lehtonen

Teen B2B-markkinoille sisällöntuottoa sekä UX-testauksia. Samaan liittyy myös koulutukset yrityksille ja webmaailman kanssa muutoin painiville. Serverien sielunelämää on joutunut ohessa opettelmaan. Toinen puoli toiminnasta on koirien ravitsemuksen ja ruokinnan suunnittelua sekä varsinkin omistajien kouluttamista hoitamaan koiriaan oikein ja vielä paremmin. Profiili: Jakke Lehtonen

Keskustele foorumilla Meta/KATISKA