Ero sivun ”Bashin ulkoasu” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
(Ak: Sivun sisältö korvattiin sisällöllä ”Tämä oli sitten viimeinen kerta Pertti, kun runkkaat sen naapurin Marjatan kanssa! Näin sanottiin Linuxin omistajalle..”)
Rivi 1: Rivi 1:
GNU/Linuxin käyttäjät ovat järkyttävän omalaatuisia, jos ei muun kanssa niin ainakin oman Linuxin pitää olla persoonallinen joka tavalla. Työpöytien koristelu ja [[XMMS]]:n nahkojen hakeminen on jokaiselle tuttua touhua tavalla tai toisella, mutta miten saisi vielä hieman koristeltua Linuxia? Helppoa, muokataan [[bash]]-komentotulkin komentokehotteen ulkoasua.
Tämä oli sitten viimeinen kerta Pertti, kun runkkaat sen naapurin Marjatan kanssa!
==Pohjustusta aiheeseen==
Monet ovat tottuneet käyttämään GNU/Linuxissa jotain graafista järjestelmää tietokoneensa hallintaan. Kuitenkin tehokasta ja ykisnkertaista komentoriviä käytetään yhä paljon. Yleisin käytössä oleva komentotulkki on [[bash]] joka mahdollistaa ulkoasunsa muokkaamisen melko laajasti.


Monesti käyttäjät monesti huomaavat selkeitä puutteita bashin komentokehotteen ulkoasussa, se kun ei esimerkiksi näytä tiedostojen tai ajossa olevien prosessien lukumäärää. Joillekin taas käy silmään se sama ainainen "käyttäjä@hkonenimi>" -teksti. Nämä asiat voidaan kuitenkin korjata kevyellä ohjelmoinnilla joka on erittäin yksinkertaista - tarvitset vain bashin, tekstieditorin ja oikean asenteen.
Näin sanottiin Linuxin omistajalle..
 
==Kevyt aloitus==
Bashin komentokehotteen ulkoasun määrää bashin sisäinen muuttuja nimeltään PS1. Lisäksi on olemassa muuttujat PS2, PS3 ja PS4, mutta käsittelemme tässä vain PS1-muuttujaa jotta bashin ulkoasun säätäminen tulisi tutuksi. Muut muuttujat ovat samalla tavalla muokattavissa, joten jos mielenkiinto riittää, niin bashin [[man]]-sivuilta löydät lisätietoa näistä muuttujista. Niistä on kuitenkin tärkeää muistaa, että ne ovat kaikki [[ympäristömuuttuja|ympäristömuuttujia]] - jos vaihdat niitä lennosta, ne vaikuttavat välittömästi komentokehotteeseesi. Kannattaa siis aluksi varmuuskopioida alkuperäinen PS1-muuttuja. Voit tallettaa sen toiseksi ympäristömuuttujaksi tai tiedostoon seuraavasti:
# Tallennus toiseen ympäristömuuttujaan nimeltä PS_SAVE.
käyttäjä@kone$ PS_SAVE=$PS1 
#Tallennus varmuuskopio.txt-nimiseen tiedostoon käyttäen hyväksi stdout:ia
käyttäjä@kone$ echo $PS1 [[komentorivin perusteet|>]] varmuuskopio.txt
Näin meillä on aina vara muokata komentokehoteen ulkoasua ja mahdollisuus palauttaa alkuperäiset asetukset jos uudet asetukset eivät toimikaan halutulla tavalla. Kokeillaan palautusta ja muokkaamista asettamalla komentokehote @-merkiksi ja sen jälkeen takaisin normaaliksi:
# Asetetaan prompt "@"-merkiksi, eli syötetään PS1:lle arvo
käyttäjä@kone$ PS1="@"
# Kokeillaan uutta ulkoasua [[ls]]-komennolla ja
# palautetaan alkuperäiseksi tallennetusta muuttujasta PS_SAVE
@ ls mail
documents public_html
# Palautetaan muuttuja PS1 ympäristömuuttujasta PS_SAVE
@ PS1=$PS_SAVE
käyttäjä@kone$
 
 
Nyt tiedämme kuinka muuttaa PS1:n sisältöä ja osaamme myös sen palauttaa siihen alkuperäisen arvon jos jokin menee pieleen.
 
==Bashin sisäänrakennetut herkut==
Jos haluamme esimerkiksi kellonajan näkymään bashin komentokehotteessa, on se suunnattoman koodirivistön takana... tai sitten ei. Bashissa on muutama sisäänrakennettu toiminto. Tässä niistä muutama, joita voimme käyttää tulevassa esimerkissämme. Lisää näistä löytyy bashin man-sivuilta.
{|
|'''Komento'''
|'''Kuvaus'''
|-
|\h
|Isäntänimi ensimmäiseen pisteeseen asti
|\H
|Isäntänimi kokonaisuudessaan
|-
|\j
|Käynnissä olevien tehtävien lukumäärä
|-
|\n\r
|Rivinvaihto
|-
|\t
|Kellonaika 24h TT:MM:SS-formaatissa
|-
|\T
|Kellonaika 12h TT:MM:SS-formaatissa
|-
|\@
|Kellonaika 12h AM/PM-formaatissa
|-
|\u
|Käyttäjänimi
|-
|\w
|Hakemistopolku senhetkiseen hakemistoon
|-
|\\
|Kenoviiva
|-
|\[   
|Ei-tulostuvien merkkien aloitus
|-
|\]
|Ei-tulostuvien merkkien lopetus
|}
No niin, kokeillaan sitten kuinka näitä käytetään. Asetetaan komenttokehotteeksemme vaikka kellonaika@käyttäjä:hakemistopolku hakasulkujen sisään. Tapahtuu seuraavalla tavalla (muista heittomerkit):
käyttäjä@kone$ PS1="[\t@\u:\w]"
[10:42:33@käyttäjä:~/hakemisto]
 
==Asetusten tallentaminen==
Tässä vaiheessa moni varmaan jo miettii, että minä en halua joka kerta komentotulkkia käynnistäessä kirjoittaa tuota tekstiä saadakseni vähän erilaisen komentokehotteen. Onneksi tuota ei tarvitse joka kerta kirjoittaakaan. Aina, kun bash käynnistetään, se lukee asetukset mm. <tt>~/.bash_profile</tt>-tiedostosta (tai <tt>~/.bashrc</tt>-tiedostosta) joka sijaitsee käyttäjän kotihakemistossa. Teemme siis muokattua komentokehotetta varten oman tiedoston ja lataamme sen <tt>~/.bash_profile</tt>-tiedoston kautta jatkuvaan käyttöön. Seuraavaksi esimerkki tiedostosta (tiedostonimi "kehote"), jolla saadaan normaali komentokehote ladattua automaattisesti bashin käynnistyessä.
#!/bin/bash
# Luodaan komentokehotetta varten funktio muuta_kehote
function muuta_kehote {
  # [käyttäjänimi@isäntänimi:hakemistopolku]$
  PS1="[\u@\h:\w]$"
}
 
Seuraavaksi otamme tiedostossa olevan muokatun komentokehotteen käyttöön käyttämällä <tt>source</tt>-komentoa ja kutsumalla funktiota "muuta_kehote". <tt>Source</tt> lataa sille parametrina annetun tiedoston, jolloin tämän komennon ajamisen jälkeen äsken luomamme funktio löytyy.
käyttäjä@kone$ source kehote
käyttäjä@kone$ muuta_kehote
# Lopputulos
[käyttäjä@kone:~/temp]$
 
Jos tämä ei toimi kuten pitäisi niin varmista, että tiedostolla on [[Chmod|suoritusoikeudet]]. Voit antaa sille suoritusoikeudet komennolla
chmod a+x kehote
Nyt meillä on tiedosto, joka voidaan ladata (komennolla <tt>source</tt>) ja funktio, jota voidaan sitten kutsua. Saamme muokattua komentokehotteen ulkoasua automaattisesti lisäämällä seuraavat rivit <tt>~/.bash_profile</tt>-tiedostoon:
source /polku/tiedostoon/kehote
muuta_kehote
 
==Väriä pintaan ja ulkoisten komentojen ajaminen==
Haluamme varmaan hieman monipuolisuutta komentokehotteeseemme. Lisäämme siis siihen pienen ulkoisen ohjelman ajamisen. Otetaan esimerkiksi vaikka tiedostolaskuri, joka ottaa syötteenä <tt>[[ls]] -l</tt> -komennon tulosteen, [[Komentorivin perusteet|putkittaa]] sen <tt>[[wc]] -l</tt> -komennolle ja tämän yhdistelmän (<tt>ls -l | wc -l</tt>) pitäisi antaa meille tiedostojen ja hakemistojen lukumäärän kansiossa, jossa olemme. Ulkoisten komentojen ajaminen tapahtuu aina <tt>$()</tt>-merkkisarjan sulkujen sisällä ja dollarimerkkiä ennen tulee olla kenoviiva. Voit ajaa käytännössä katsoen mitä vain komentoja näiden merkkien sisältä, putkittaa niitä, ohjata niiden tulosteita tiedostoihin tai antaa niille [[Standardivirrat|stdinin]] avulla tiedostoja argumenteiksi.
 
Uusi <tt>muuta_kehote</tt>-funktiomme voisi näyttää vaikka tältä
#!/bin/bash
function muuta_kehote {
# Lisätään kehotteen yläpuolelle ulkopuolinen komento
# $()-merkkisarjan sisään ja sen loppuun rivinvaihto="\n\r"
PS1="-=\$(ls -l | wc -l)=-\n\r[\u@\h:\w]$" }
 
Ladataan nyt <tt>source</tt>lla tiedosto ja kutsutaan funktiota muuta_kehote:
käyttäjä@kone$ source kehote
käyttäjä@kone$ muuta_kehote
#lopputulos näyttä jotakuinkin tältä
-=40=-
[käyttäjä@kone:~]$
 
Nyt osaamme siis liittä ulkopuolisia komentoja, mutta komentokehotteemme näyttää silti vielä hieman keskeneräiseltä. Lisäämme siihen siis hieman väriä piristämään ulkoasua. Värikoodit joita käytämme, tulee aina laittaa <tt>\[\033[VÄRIKOODIm\]</tt>-merkkijonon sisään (kohtaan jossa lukee värikoodi). Muutoin bash ei tajua niitä. Voit käyttää värikoodeja sellaisenaan tai sitten tallentaa ne muuttujaan, jolloin niiden käyttö on huomattavasti vaivattomampaa. Alla olevassa taulukossa on listattu värikoodit
{|
|'''Väri'''
|'''Koodi'''
|-
|Musta
|0;30
|-
|Punainen
|0;31
|-
|Vihreä
|0;32
|-
|Ruskea
|0;33
|-
|Sininen
|0;34
|-
|Violetti
|0;35
|-
|Syaani
|0;36
|-
|Vaaleanharmaa
|0;37
|-
|Tummanharmaa
|1;30
|-
|Vaaleanpunainen
|1:31
|-
|Vaaleanvihreä
|1:32
|-
|Keltainen
|1;33
|-
|Vaaleansininen
|1;34
|-
|Vaaleanvioletti
|1;35
|-
|Vaalea syaani
|1;36
|-
|Valkoinen
|1;37
|}
 
Seuraavassa esimerkissämme lisäämme vielä aikaisemmin tekemäämme komentokehotteen ulkoasua muuttavan funktioon muutamia värejä. Ensin teemme niistä paikallisia muuttujia, joiden nimiä voidaan käyttää värien tulostamiseen. Värit tulee asettaa voimaan ennen sitä tekstinpätkää, johon sen halutaan vaikuttavan, koska bashin fontin väri vaihtuu ruudulle tulostamisen ajaksi ja emme halua ylimääräisiä värejä komentokehotteeseemme. Värit myös jatkuvat siihen asti kunnes toinen väri määrätään. Huomaa komentokehotteen lopussa oleva <tt>$EI_VARIA</tt>-komento, jota ilman viimeksi annettu väri jäisi näkymään vielä kirjoitettavassakin tekstissä.
#!/bin/bash
function muuta_kehote {
  #asetetaan värit paikallisiin muuttujiin
  local PUN="\[\033[0;31m\]"
  local VPUN="\[\033[1;31m\]"
  local SIN="\[\033[0;34m\]"
  local VSIN="\[\033[1;34m\]"
  local VALK="\[\033[1;37m\]"
  local EI_VARIA="\[\033[0m\]"
  # Lisätään väriä komentokehotteeseemme. Huomaa, että muuttujat lisätään aina
  # dollarimerkki edessä
  PS1="$VSIN-$SIN=$VALK\$(ls -l | wc -l)$SIN=$VSIN-\n\r[$PUN\u$VALK@$PUN\h$V PUN:\w$SIN]$VALK$ $EI_VARIA"
}
 
Nyt vain lataat tiedoston <tt>source</tt>lla ja ajat funktion muuta_kehote, ja komentokehote on entistä ehompi ja värikkäämpi.
 
== Lopuksi ==
Tässä artikkelissa on kerrottu perusasiat komentokehotteen ulkoasun muokkaamisesta. Vain mielikuvitus on rajana tehdessäsi itsellesi persoonallista komentokehotetta. Muista myös bashin man-sivut jotka auttavat ongelmissa ja tarjoavat elintärkeää lisätietoa.
 
== Katso myös ==
*[[Bash]]
*[[Komentorivikomennot]]
*[[Komentorivivinkkejä]]
 
[[Luokka:Komentorivi]]

Versio 12. elokuuta 2008 kello 19.06

Tämä oli sitten viimeinen kerta Pertti, kun runkkaat sen naapurin Marjatan kanssa!

Näin sanottiin Linuxin omistajalle..