Bash aliassen en functies

Op deze pagina:

Voor opdrachten die je vaak gebruikt en lang en ingewikkeld zijn kan je aliassen maken, een soort afkortingen die je typwerk besparen.

Een alias aanmaken kan met de opdracht alias.

Voorbeeld


alias ll="ls -la"

Als je nu ll intypt, dan krijg je dezelfde uitvoer als wanneer je ls -la zou hebben getypt.

Als je via de opdrachtregel een alias aanmaakt, dan is deze alleen beschikbaar in de huidige shell. Zodra je deze sluit is de alias weer ongedaan gemaakt. Om een alias permanent te maken, kan je deze opnemen in ~/.bashrc of in ~/.bash_aliases als deze laatste ondersteund wordt via het ~/.bashrc bestand. Deze ondersteuning in ~/.bashrc kan er zo uitzien:


if [ -e $HOME/.bash_aliases ]; then
    source $HOME/.bash_aliases
fi

Om de aanpassing in ~/.bashrc te laden in de huidige shell kan je dit gebruiken:


source ~/.bashrc

Alias verwijderen

Een alias die je via de opdrachtregel hebt aangemaakt, kan je via de opdrachtregel ook weer verwijderen met de unalias opdracht:


unalias ll

Alias tijdelijk uitschakelen

Als je een bestaande opdracht hebt vervangen door een alias met dezelfde naam met een andere of uitgebreidere functionaliteit je wilt de oorspronkelijke functionaliteit van de opdracht weer even gebruiken, dan kan dat door er een backslash voor te zetten.


# Stel je hebt deze alias aangemaakt:
alias ls="ls -lhA"

# De oorspronleijke fumcionaliteit van
# ls weer even gebruiken:
\ls

Alle aliassen opsommen

Alle aliassen opsommen die actief zijn kan door eenvoudigweg de opdracht alias te gebruiken zonder verdere toevoegingen.


alias

Alias met parameters

Als je een alias wil waar je paramaters aan mee kan geven, dan moet je een bash functie aanmaken.

Functies kan je net als aliassen in een apart bestand opnemen als je dit in je ~/.bashrc opneemt:


if [ -e $HOME/.bash_functions ]; then
    source $HOME/.bash_functions
fi

Voorbeeld van een functie waarmee je een directory aanmaakt en er meteen naar toe gaat:


function mkcd ()
{
  mkdir -p -- "$1" && cd -P -- "$1"
}

De -p parameter zorgt ervoor dat ouderdirectories ook worden angemaakt als die nog niet bestaan.

De dubbele streepjes -- zorgen ervoor dat een argument dat met een streepje begint niet wordt aangezien voor een extra argument.

De dubbele ampersands && zorgen ervoor dat de tweede opdracht alleen wordt uitgevoerd als de eerste gelukt is.

Voorbeelden van handige aliassen

Welke aliassen je handig vindt, hangt af van welke opdrachten je vaak gebruikt of moeilijk kan onthouden.

ll - Uitgebreide vorm van ls

Een uitgebreide vorm van ls gebruiken zonder veel typwerk kan met ll:


alias ll='ls -alF'

lsd - Alleen directories tonen

Een alias om alleen mappen te tonen, met de naam van een drug:


# alleen directories tonen
alias lsd='ls -d */'

datum - Datum en tijd als notificatie

Als je notify-send hebt geinstalleerd, dan kan je via de opdrachtregel desktop notificaties maken:


# dit werkt alleen als je notify-send hebt geinstalleerd
alias datum='notify-send  datum "`date`"'

pizza - Pizza is klaar

Als je notify-send hebt geinstalleerd, dan kan je jezelf een notificatie sturen als je pizza klaar is:


# De opdracht pizza stuurt een notificatie na 12 minuten
alias pizza='sleep 12m; notify-send "Pizza!" "Je pizza is klaar!"'

melding pizza is klaar

bijwerken - Updates installeren en overbodige pakketten verwijderen

Eenvoudig bijwerken intypen en je bespaart jezelf veel typwerk.


# updates installeren en overbodige pakketten verwijderen
alias bijwerken='sudo apt-get update && sudo apt-get upgrade && sudo apt-get autoremove'

intip - Interne ip-adres opvragen

Het interne netwerk ip-adres opvragen van je computer kan via ifconfig, als dat is geinstalleerd, anders moet je dat eerst nog installeren


# Bij de melding: 'ifconfig' niet gevonden
# kan je deze installeren met:
# sudo apt install net-tools

alias intip="ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'"

extip - Externe ip-adres opvragen

Je externe ip-adres opvragen:


alias extip="echo 'Je externe ip-adres is:'; curl https://ipecho.net/plain; echo"

schijf - Schijfgebruik laten zien

Bestanden en mappen op schijf in je huidige map gesorteerd op grootte.


# schijfgebruik laten zien
alias schijf='du -hsc ./* | sort -hr'

netscan - Welke apparaten hangen er in je netwerk

Zien welke apparaten er in jet netwerk hangen kan met:


# netwerk scannen, bij ander netwerk moet je
# het adres en subnet aanpassen
# Melding: Opdracht 'nmap' niet gevonden,
# maar deze kan worden geïnstalleerd met:
# sudo apt install nmap
alias netscan='nmap -sP 192.168.1.0/24'

geluid - Geluid herstarten

Bij problemen met het geluid op je computer:


#geluid herstarten
alias geluid='pulseaudio -k && sudo alsa force-reload'

usb - USB drives opsommen

Welke USB drives ziet je computer:


#Alle usb drives opsommen
alias usb='USB_DRIVES="";
for _device in /sys/block/*/device; do
    if echo $(readlink -f "$_device")|egrep -q "usb"; then
        _disk=$(echo "$_device" | cut -f4 -d/)
        USB_DRIVES="$USB_DRIVES $_disk"
    fi
done;
echo Gevonden USB drives: "$USB_DRIVES"'

history10 - De meest gebruikte opdrachten

De top tien:


# meest gebruikte opdrachten
alias history10='cat ~/.bash_history | sort |uniq -c|sort -nr|head -n 10'

vandaag - Welke bestanden zijn vandaag aangepast

De veranderingen in de huidige map en de onderliggende mappen.


# welke bestanden zijn vandaag aangepast
alias vandaag='find . -mtime 0'

syms - Symlinks opvragen

Het opsporen van symlinks met syms.


# symlinks in huidige en onderliggende mappen opvragen
alias syms="find . -type l -printf '%p -> %l\n'"

Voorbeelden van handige functies

Het voordeel van functies is dat je argumenten kan toevoegen aan de opdracht waar de functie iets mee doet.

cl - Ga naar een map en laat de inhoud zien

De functie cl gaat naar een map en laat de inhoud zien:


function cl() {
    DIR="$*";
    # indien geen DIR is opgegeven,
    # dan naar je home map
    if [ $# -lt 1 ]; then
        DIR=$HOME;
    fi;
    builtin cd "${DIR}" && ls -F --color=auto
}

skip - Karakters verwijderen aan het begin van .mp3 bestandsnamen

De namen van .mp3 bestanden beginnen soms met cijfers, spaties en streepjes. Als je die weg wil hebben van een alle .mp3 bestanden in een map dan kan een functie handig zijn.

De functie skip getal verwijdert het aantal karakters dat getal aangeeft van de namen van .mp3 bestanden in een map. Deze actie is definitief, dus je moet zeker weten dat je het juiste aantal opgeeft. Om dit van te voren te controleren is er een tweede functie: skipshow getal. Deze functie hernoemt de bestanden niet, maar laat zien hoe de bestanden gaan heten als ze hernoemd worden met skip getal.


# bijvoorbeeld: skip 5 zal de eerste 5 karakters
# van de namen van .mp3 bestanden verwijderen
function skip() {
    if [ $# -lt 1 ]; then
    # tekst tonen als er geen getal is opgegeven
        echo 'Gebruik deze functie met skip <getal>; waarbij het <getal> het aantal karakters is dat aan het begin van de bestandsnamen van .mp3  bestanden moet worden verwijderd. Je kan een preview krijgen via skipshow <getal>.';
    fi;
    AANTAL=$1;
    for f in *.mp3 ; do
        b=${f:${AANTAL}:500}
        # alleen uitvoeren indien er
        # daadwerkelijk een .mp3 bestand is:
        [[ -f "$f" ]] && mv "$f" "$b"
    done
}

De functie skipshow om van te voren de veranderingen te kunnen zien:


# voordat je skip uitvoert is het handig om
# eerst te zien hoe de bestanden gaan heten,
# je kan het aantal karakters verkeerd geteld hebben
function skipshow() {
    if [ $# -lt 1 ]; then
    # tekst tonen als er geen getal is opgegeven
        echo 'Gebruik deze functie met skipshow <getal>; waarbij het <getal> het aantal karakters is dat aan het begin van de bestandsnamen van .mp3 bestanden moet worden verwijderd bij het gebruik van de functie skip <getal>. Deze functie geeft een preview maar past de namen niet aan.';
    fi;
    AANTAL=$1;
    for f in *.mp3 ; do
        b=${f:${AANTAL}:500}
        # alleen tonen indien er
        # daadwerkelijk een .mp3 bestand is:
        [[ -f "$f" ]] && echo $b
    done
}

Stel je hebt een map met .mp3 bestanden die het volgende patroon hebben:

  • 01 - John Lennon - Imagine.mp3
  • 02 - John Lennon - Mind Games.mp3
  • 03 - John Lennon - Woman.mp3

Deze .mp3 bestanden staan in een map en je wilt alle .mp3 bestanden in die map aanpassen. Het aantal karakters dat weg moet is vijf: twee cijfers, een spatie, een streepje en nog een spatie. Met skip 5 gaat dit lukken, de nieuwe bestandsnamen van dit voorbeeld worden dan:

  • John Lennon - Imagine.mp3
  • John Lennon - Mind Games.mp3
  • John Lennon - Woman.mp3

 

Verwante artikelen