Vandaag bekijken we hoe je bash kunt instellen, hoe je aliassen gebruikt en nog wat tips om uw shell beter te leren kennen. De shell leren gebruiken is een een marathon en geen sprint. Dit vraagt dus tijd en veel training (oefening). Deze tip zorgt voor wat training.
Even opfrissen: de tilde (~) is een verkorte schrijfwijze voor de persoonlijke map. M.a.w. ~/.bashrc wordt door de shell uitgebreid tot /home/gebruiker/.bashrc.
Om de shell aan te passen, moet je het bestand ~/.bash_profile voor een shell met aanmelden en het bestand ~/.bashrc voor shells zonder aanmelden aanpassen.
Een eenvoudig voorbeeld:
# Stel hier uw favoriete teksteditor in
export EDITOR=/usr/bin/joe
# Aliases instellen
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
De regels die beginnen met hekjes (#) zijn commentaar. De shell zal deze regels negeren. De tweede regel zet de EDITOR omgevingsplaatshouder (environment variable) op joe. Bash weet zo dat joe uw standaard teksteditor is.
De drie laatste regels zorgen ervoor dat bash het bestand ~/.bash_aliases leest, indien het bestaat. Dit bestand bevat aliassen (zie verder). Het lijkt nogal raadselachtig, maar de regel . ~/.bash_aliases betekent: plaatst hier de inhoud van het bestand ~/.bash_aliases.
Bij het intypen van een opdracht in de shell, zoekt bash in specifieke mappen naar de opdracht.
Als je ls
in een shell typt, zal bash de opdracht ls
enkel uitvoeren als bash de opdracht ls
in deze specifieke mappen kan vinden.
Indien bash de opdracht ls
niet in het path (de specifieke mappen) vindt, kan bash de opdracht niet uitvoeren.
Indien de opdracht ls
in verschillende path mappen voorkomt, zal bash de eerst gevonden opdracht uitvoeren.
echo $PATH
Het resultaat van deze opdracht lijkt op:
/home/dany/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib64/jvm/jre/bin
Elke map waarin bash naar opdrachten zoekt, wordt door komma's gescheiden. Merk op dat de eerste map die door bash bekeken wordt, de bin map in mijn persoonlijke map is, daarna /usr/local/bin, daarna /usr/bin, enz.
Je kunt mappen aan het path toevoegen door de bestanden ~/.bashrc en ~/.bash_profile aan te vullen met de volgende opdracht:PATH="$HOME/bin:$PATH"
Nader bekeken, betekent PATH= dat het path ge(her)definieerd wordt. $HOME/bin voegt de map bin in de persoonlijke map toe aan path. $PATH voegt de oude reeds in path aanwezige mappen eveneens toe aan path. Dubbele punten scheiden de verschillende onderdelen.
Uw ~/.bash_profile en/of ~/.bashrc bestanden bevatten waarschijnlijk reeds de volgende gelijkaardige regels:if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Deze regels testen of er een map bin in uw persoonlijke map bestaat en voegt deze indien aanwezig toe aan path.
alias ls='ls --color=auto'
Dit zorgt ervoor dat bij het uitvoeren van de opdracht ls
bash ls zal vervangen door de opdracht ls --color=auto
.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Om de reeds in ingestelde aliassen op te sommen, voer je de opdracht alias
uit.
Je zult verwonderd zijn van wat uw distributie reeds standaard heeft ingesteld.
Hier volgt de standaard voor openSUSE 11.3:
alias +='pushd .'
alias -='popd'
alias ..='cd ..'
alias ...='cd ../..'
alias beep='echo -en "\007"'
alias cd..='cd ..'
alias dir='ls -l'
alias l='ls -alF'
alias la='ls -la'
alias ll='ls -l'
alias ls='ls $LS_OPTIONS'
alias ls-l='ls -l'
alias md='mkdir -p'
alias o='less'
alias rd='rmdir'
alias rehash='hash -r'
alias unmount='echo "Error: Try the command: umount" 1>&2; false'
alias you='if test "$EUID" = 0 ; then /sbin/yast2 online_update ; else su - -c "/sbin/yast2 online_update" ; fi'
Als oefening kun je kijken welke standaard aliassen op uw systeem gebruikt worden. En kun je er een paar zelf aan toevoegen.
Voor het uitvoeren van een opdracht zal bash de opdracht evalueren en eventuele aliassen en uitdrukkingen gepast uitbreiden. Je kent reeds uitbreidingen van aliassen en de tilde (~) die uitgebreid wordt naar $HOME.
Bash breidt een aantal tekens uit naar één of meerdere andere tekens (beter bekend als jokers of wildcards). Het gebruik van patroonherkenning kan zeer nuttig zijn. Een voorbeeld: om alle JPEG-bestanden in een map op te sommen, gebruik je de opdracht ls *jpg en bash breidt dit uit tot alle bestanden die eindigen op jpg.
Om maar één teken voor te stellen, gebruik je ?.
M.a.w. de opdracht ls ?.jpg
somt bestanden zoals 1.jpg of a.jpg op, maar niet 01.jpg.
Met behulp van rechte haken kun je een set tekens opgeven.
Bij het gebruik van [abc12] zal bash uitbreiden tot één teken die beperkt wordt door de opgegeven tekens.
M.a.w. de opdracht ls -lh [abc12].jpg
somt bestanden zoals a.jpg, b.jpg, c.jpg, 1.jpg and 2.jpg op, maar niet 12.jpg of abc.jpg.
Je kunt de werking ook omkeren door gebruik te maken van het uitroepteken (!).
M.a.w. ls -lh [!ab12].jpg
somt bestanden zoals c.jpg of 3.jpg op, maar niet 2.jpg.
mkdir 2011/{01..12}
Bash zal dit uitbreiden tot twaalf mappen beginnend met 01 en eindigend met 12.
Dit werkt ook met letters.
Om 26 mappen te maken met namen van a tot en met z, gebruik je de opdracht:
mkdir {a..z}
Vanzelfsprekend werkt dit ook met hoofdletters.Dit werkt ook met door komma's gescheiden waarden.
Veronderstel dat je een map vol afbeeldingen in het JPEG, PNG en GIF formaat moet verplaatsen naar een map met afbeeldingen.
De opdracht mv *.jpg *.png *.gif /afbeeldingen
voert dit perfect uit.
Een iets kortere opdracht is: mv *.{jpg,gif,png} /afbeeldingen
.
opdracht `andere opdracht`Bash voert eerst de opdracht "andere opdracht" uit en voert daarna de eerste opdracht met het resultaat van de andere opdracht uit. Een voorbeeld: om een bestand aan te maken als naam de huidige datum, gebruik je:
touch `date +%F`.txt
Het resultaat van de opdracht date +%F
is het jaar, de maand en de dag gescheiden door mintekens.
Je maakt dus afhankelijk van de huidige datum het bestand 2011-05-13.txt aan.