Zsh

Linux.fista
Siirry navigaatioon Siirry hakuun
Tulostettavaa versiota ei enää tueta ja siinä voi olla renderöintivirheitä. Päivitä selaimesi kirjanmerkit ja käytä selaimen tavallista tulostustoimintoa sen sijaan.
Zsh
Käyttöliittymä teksti
Lisenssi MIT
Kotisivu www.zsh.org zsh.sourceforge.net

Zsh eli Z Shell on kehittynyt komentotulkki Unix-järjestelmille. Sitä voi käyttää sekä normaalina kirjautumiskomentotulkkina että skriptikielenä. Zsh:n kehitys aloitettiin 1990, ja se on tällä hetkellä luultavasti eniten ominaisuuksia sisältävä Unix-komentotulkki. Jotta eri ominaisuudet eivät veisi liikaa muistitilaa, on valtaosa niistä sijoitettu erikseen ladattaviin funktioihin. Zsh huolehtii itse komentorivin editoinnista (ZLE), kun se esimerkiksi Bashissa on ulkoistettu jokseenkin rajoittuneelle Readline-kirjastolle. Zsh:ssa on ollut Unicode-tuki helmikuussa 2006 julkaistusta 4.3.1-versiosta lähtien.

Asennus

Zsh löytyy useimpien jakeluiden paketinhallinnasta nimellä zsh. Lisätietoja ohjelmien asentamisesta löytyy artikkelista Ohjelmien asentaminen.

Ominaisuuksia

  • Ohjelmoitava komennontäydennystoiminto, joka auttaa yleisimpien komentojen argumenttien täydentämisessä (sisältää tuon muutamalle sadalle yleisimmälle komennolle). Myös esimerkiksi man-sivujen nimien täydennys toimii. Esimerkki:
[matti@masiina] ~ % yum c
check-update  -- Check if any updates are available
clean         -- Clean local yum cache  
  • Mahdollisuus jakaa komentohistoria kaikille samaan aikaan päälläoleville zsh-istunnoille
  • Muuttujien ja taulukoiden edistynyt hallinta
  • Prompt-teemat
  • Oikoluku, esimerkiksi komento pwero täydentyy poweroffiksi.
  • Globbing-tuki eli tiedostonnimien automaattinen täydennys erilaisten wildcardien avulla. Esimerkiksi seuraava lisäisi merkkijonon foo kyseisen hakemiston jokaisen .txt-päätteisen tiedoston loppuun:
echo "foo" >>*.txt
  • Yhteensopivuustila (zsh:n saa tarvittaessa toimimaan esimerkiksi kuin sh, csh tai ksh.
  • Itsekirjoitetut funktiot (laajennukset)

Asetukset

Kuten useimpien muidenkin ohjelmien asetustiedostoja, on zsh:n asetustiedostoja kahdenlaisia, koko järjestelmän laajuisia, jotka ovat muotoa /etc/foo ja käyttäjäkohtaisia, jotka ovat muotoa ~/.foo (~ tarkoittaa käyttäjän kotihakemistoa ja piste on piilotiedoston merkki). Järjestelmänlaajuinen tiedosto ajetaan yleensä ennen käyttäjäkohtaista. Zsh:n käynnistämisen ja sulkemisen yhteydessä ajattavat asetustiedostot ovat seuraavat:

  • /etc/zshenv ja ~/.zshenv

/etc/zshenv ajetaan ensimmäisenä aina zsh:n käynnistyessä siitäkin huolimatta, vaikka zsh olisi käynnistetty käynnistystiedostojen ajon estävällä -f-valitsimella (setopt NO_RSC). ~/.zshrc tottelee -f-valitsinta.

  • /etc/zprofile ja ~/.zprofile

ajetaan zshenv:n jälkeen mikäli käyttäjä kirjautuu sisään kyseisellä zsh-istunnolla, eli kyseessä on kirjautumiskomentotulkki.

  • /etc/zshrc ja ~/.zshrc

Luetaan zshenvin (ja zprofilen) jälkeen, mikäli zsh käynnistetään interaktiivisena komentotulkkina. Komentotulkki on interaktiivinen, kun sitä ei käytetä skriptin ajamiseen, vaan komennot syötetään itse reaaliajassa.

  • /etc/zlogin ja ~/.zlogin

ajetaan zshrc:n jälkeen, mikäli kyseessä on kirjautumiskomentotulkki.

  • ~/.zlogout ja /etc/zlogout

ajetaan kirjautumiskomentotulkista poistuttaessa. Käyttäjäkohtainen tiedosto ajetaan muista poiketen ennen järjestelmänlaajuista tiedostoa.

Seuraavassa on esimerkki zshrc-tiedostosta. Lue ennen käyttöönottoa.

# Määritetään promptin (komentorivillä aina näkyvät merkit) ulkoasu. Muuttuja 
# PROMPT on sama kuin PS1. %n tarkoittaa koneen ja %m käyttäjän nimeä. %~ on
# nykyinen työhakemisto ja %# on valmiusmerkki (tavallisilla käyttäjillä % ja
# rootilla #). Tulos näyttää tältä: [kayttaja@kone] /usr/bin/ % 
# %~:n voi korvata %d:llä jolloin esim. kotihakemiston nimeä ei lyhenetä ~:nä. 
# zsh:ssa on myös mahdollista käyttää valmiita prompt-teemoja.
PROMPT='[%n@%m] %~ %# '

# Määritellään komentorivin oikeassa laidassa näkyvä teksti (valinnainen). 
# %t tarkoittaa kellonaikaa.
#RPROMPT='%t'

# Asetetaan komentohistoriatiedosto
export HISTFILE=~/.history

# Asetetaan historiatiedoston suurin mahdollinen koko riveinä 
export HISTSIZE=999999999

# Asetetaan kerralla historiatiedostoon tallennettavien rivien maksimimäärä
export SAVEHIST=999999999

# Lisätään hakemistot /usr/local/bin/ ja $HOME/bin PATH-muuttujaan
export PATH="$PATH:/usr/local/bin:$HOME/bin"

# Määritetään oletustekstieditori. Tämä asetus vaikuttaa myös käytettävään
# näppäinyhdistelmäteemaan (vi tai emacs) mikäli sitä ei erikseen  
# määritetä bindkey-komennolla.
export EDITOR="vim"
export VISUAL=$EDITOR

# Asetetaan ls-komennon käyttämät värit. (Muunna kaikki yhdelle riville.)
export  LS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:
bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:
*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:
*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:
*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:
*.rpm=00;31:*.deb=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:
*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'

# Komentojen täydennyksen asetuksia. Näiden asetusten luontiin voi myös käyttää  
# valmista velhoa, joka käynnistyy komennolla compinstall

# Asetetaan täydennyslistan väreiksi samat, kuin ls:llä
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}

# Ladataan normaalit täydennysfunktiot sekä oikoluku
zstyle ':completion:*' completer _expand _complete _correct _approximate

# Mahdollistaa sekä merkkijonon ensimmäisiin että viimeisiin merkkeihin 
# pohjautuvan täydennyksen.
zstyle ':completion:*' expand prefix suffix

# Täydennyslistan aakkosellinen järjestys. Muita vaihtoehtoja ovat mm. size 
# (koko), date (muutospäivämäärä), time (muutosaika), access (edellinen avausaika) 
# sekä reverse (kääntää tulostuksen)
zstyle ':completion:*' file-sort name

# Täydennettäessä yläpuolisten hakemistojen nimiä (cd ../) ei oteta huomioon nykyistä työhakemistoa
zstyle ':completion:*' ignore-parents pwd

# ps:n tulosteeseen pohjautuva valikkopohjainen täydennys kill-komennolle.
zstyle ':completion:*:*:kill:*' menu yes select
zstyle ':completion:*:kill:*' force-list always

# Valikkopohjainen täydennys joka käynnistyy, kun vaihtoehtoja on yli ruudullinen. 
zstyle ':completion:*' menu select=long
zstyle ':completion:*' select-prompt %SValikko aktiivinen. Sijainti: %p %s

# Isojen ja pienien kirjainten sekä välimerkkien vastaavuus komentojen   
# oikoluvussa. Toisin sanoen mahdollistaa esimerkiksi komennon 'EMACs' 
# täydentämisen 'emacs'iksi.
zstyle ':completion:*' matcher-list  'm:{a-zA-Z}={A-Za-z} r:|[._-,]=** r:|=** l:|=*'

# Käynnistetään (uuden tyylin mukaiset) täydennystoiminnot
autoload -Uz compinit
compinit

# Sallii tab-täydennyksen myös sanan keskellä
setopt COMPLETE_IN_WORD

# Pidetään taustaprosessit täydellä nopeudella
#setopt NOBGNICE

# Liitetään zsh-istunnon päättyessä syötetyt komennot historiatiedoston loppuun 
# sen nollamisen sijaan
setopt APPEND_HISTORY

# Liitetään syötetyt komennot historiatiedostoon välittömästi niiden syöttämisen 
# jälkeen
setopt INC_APPEND_HISTORY

# Jaettu komentohistoria samanaikaisesti päälläolevien zsh-istuntojen kesken
#setopt SHARE_HISTORY

# Älä näytä montaa identtistä riviä haettaessa komentohistoriasta (CTRL+R)
setopt HIST_FIND_NO_DUPS

# Älä lisää identtisiä peräkkäisiä komentoja komentohistoriaan.
# Jos esim. kirjoitat 30 kertaa peräkkäin "ls", lisätään näistä vain yksi.
#setopt HIST_IGNORE_DUPS

# Poistaa kaikki edeltävät identtidet rivit komentohistoriasta, vaikka näiden
# komentojen välillä olisi annettu muita komentoja.
#setopt HIST_IGNORE_ALL_DUPS

# Jos annettua komentoa ei voida suorittaa ja se on hakemistonnimi, niin
# siirrytään automaattisesti tähän hakemistoon (cd).
setopt AUTO_CD
 
# Ei ikinä piipata
unsetopt BEEP

# Asetetaan muutamia aliaksia
alias stx="startx >& /dev/null &"
alias top="top -d1"
alias ls="ls --color=auto"
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias mnt="mount"

# Listaa vain hakemistot ja hakemistoihin viittaavat symboliset linkit
alias lsd='ls -ld *(-/DN)'

# Listaa vain pisteellä alkavat tiedostot
alias lsa='ls -ld .*'

# Emacs-tyylinen komentorivin muokkaus (oletus)
bindkey -e 

# Vi-tyylinen komentorivin muokkaus
#bindkey -v
 
# Korjataan Home- End- ja backspace-näppäinten toiminta
bindkey '\e[1~' beginning-of-line
bindkey '\e[4~' end-of-line
bindkey '^[[3~' delete-char

# Korjataan backspace-näppäimen toiminta xtermissä
case $TERM in (xterm*)
               bindkey '\e[H' beginning-of-line
                       bindkey '\e[F' end-of-line ;;
               esac

Asetustiedoston muutokset saa helpoiten käyttöön käynnistämällä zsh uudelleen komennolla

exec zsh

Katso myös

  • Oh My Zsh - Asetukset, joilla Zsh-shellistä saadaan muun muassa interaktiivisempi

Aiheesta muualla