Revisions for InformatikkBash

changed:
-
<H1>Overgang fra <EM>tcsh</EM> til <EM>bash</EM></H1>

Bash har overtatt som standard shell.  Ved normal bruk av kommandolinjen vil en knapt merke forskjell mellom de to shellene, men ved mer avansert bruk er det nødvendig å være oppmerksom på forskjellene.  Teksten nedenfor tar for seg forskjeller mellom <EM>bash</EM> og <EM>tcsh</EM>, men nesten alt som gjelder for <EM>tcsh</EM> vil også gjelde for <EM>csh</EM>.

<H2>Oppstartsfiler</H2>

Bash vil lese .bash_profile i hjemmekatalogen din hvis den finnes.  Vanligvis vil .bash_profile inneholde følgende kode:
<pre>
if [ -f ~/.bashrc ]; then
&nbsp; &nbsp; . ~/.bashrc
&nbsp; &nbsp; export BASH_ENV=$HOME/.bashrc
fi
</PRE>
Med denne kodebiten på plass i .bash_profile, vil .bashrc tilsvare .cshrc for tcsh, mens .bash_profile tilsvarer .login for tcsh.

Default oppstartsfiler finnes i katalogen <CODE>/etc/skel</CODE>.
Merk at Oppstartsfilene er «skjulte» filer som ikke vises ved vanlig fillisting.
Bruk opsjon <CODE>-A</CODE> til <CODE>ls</CODE> eller velg «Show hidden files» i preferences til File manager.

<H2>Filnavnskomplettering</H2>

Tcsh: filnavn kompletteres med TAB, alternativer vises med CTRL-D

Bash: filnavn kompletteres med TAB, alternativer vises med TAB-TAB

Bash har muligheten til mer avansert filnavnskomplettering.  Du kan f.eks legge følgende inn i .bashrc
<BLOCKQUOTE>
    complete -A directory   cd rmdir
</BLOCKQUOTE>
Dette forteller bash at <EM>cd</EM> og <EM>rmdir</EM> er kommandoer som skal ha kataloger som argument, og at filnavnskompletteringen bare skal gå mot katalognavn.  Se manualsiden til bash for flere detaljer.

<H2>Variabler</H2>

Tcsh opererer med to typer variabler, shellvariabler og miljøvariabler.  Miljøvariabler arves av prosesser du starter fra shellet, mens shellvariablene ikke går i arv.  Bash har bare en variabeltype, men du kan flagge at en variabel skal arves som en miljøvariabel med <CODE>export</CODE>.

Shellvariabler:<BR>
Tcsh: <CODE>set variabel = verdi</CODE><BR>
Bash: <CODE>variabel=verdi</CODE><BR>
Merk, ingen mellomrom rundt likhetstegnet når en bruker bash.

Miljøvariabler:<BR>
Tcsh: <CODE>setenv VARIABEL verdi</CODE><BR>
Bash: <CODE>export VARIABEL=verdi</CODE>

<H2>Aliaser</H2>
Når du definerer aliaser i bash, må du ha med et likhetstegn, eksempel:<BR>
Tcsh: <CODE>alias .. "cd .."</CODE><BR>
Bash: <CODE>alias ..="cd .."</CODE><BR>
Merk, ingen mellomrom rundt likhetstegnet.

En kan ikke bruke argumenter til alias i bash, men en kan bruke shell funksjoner for å gjøre det samme (og mer). Disse legges inn i .bashrc som du ville gjort med et alias.

Eksempel .bashrc fil:
<pre>
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# siste argument: ${!#} første argument: $1 
function map() {
  cat ${!#} | maple -e -f $1 -
}

# alle argumenter settes inn ved '$*'
function dvi() {
  xdvi -noghostscript -paper a4 -expert -keep $* &
}

alias ll="ls -l"
alias ltr="ls -ltr"
</pre>

<H2>Variabler som styrer shellets oppførsel</H2>

<H3>Noclobber</H3>
<EM>Noclobber</EM> angir at du ikke skal overskrive eksisterende filer ved redirigering.  I tcsh setter du <EM>noclobber</EM> slik:
<BLOCKQUOTE>
    set noclobber
</BLOCKQUOTE>
mens du setter den slik i bash:
<BLOCKQUOTE>
    set -o noclobber
</BLOCKQUOTE>

Noclobber kan overstyres, men det gjøres ulikt i tcsh og bash<BR>
Tcsh: <CODE>kommando >! filnavn</CODE><BR>
Bash: <CODE>kommando >| filnavn</CODE>

<H3>Ignoreeof</H3>
<EM>Ignoreeof</EM> angir at shellet ikke skal avsluttes når du trykker CTRL-D (end of file).  I tcsh setter du <EM>ignoreeof</EM> slik:
<BLOCKQUOTE>
    set ignoreeof
</BLOCKQUOTE>
mens du setter <EM>ignoreeof</EM> slik i bash:
<BLOCKQUOTE>
    set -o ignoreeof
</BLOCKQUOTE>

<H2>Flytkontroll</H2>

All flytkontroll (if-setninger, for-løkker osv) kodes ulikt i tcsh og bash.  Se man-sidene for detaljer.

<H2>Shellscript</H2>

Ved overgang fra tcsh til bash kan noen shellscript slutte å virke.  Dette gjelder script som begynner med en # (firkant), men ikke de som begynner med #! (firkant utropstegn).  Script som bare begynner med en # (firkant) må rettes slik at de begynner med:
<BLOCKQUOTE>
    #!/bin/tcsh
</BLOCKQUOTE>