Pipefail
Bijna iedereen heeft wel eens set -euo pipefail
bovenaan een shell script zien staan.
Maar wat betekent dat nou precies? En waarom gebruiken we dat? Waar vind ik daar de documentatie van? Wat is de betekenis van het leven?
Bijna iedereen heeft wel eens set -euo pipefail
bovenaan een shell script zien staan.
Maar wat betekent dat nou precies? En waarom gebruiken we dat? Waar vind ik daar de documentatie van? Wat is de betekenis van het leven?
Veel beheerders brengen (terecht) een groot deel van hun dag door op de command prompt. Nu wordt natuurlijk alles wat geautomatiseerd kan worden ook geautomatiseerd, maar wat handwerk zal er altijd zijn. Nu kan het zijn dat sommig van dat handwerk een kans van falen heeft, bijvoorbeeld omdat een remote systeem (tijdelijk) niet bereikbaar is, omdat een mirror nog niet gesynchroniseerd is, of gewoon omdat de stand van de maan je systeem niet aanstaat.
In plaats van een commando dan met de hand meerdere keren te proberen kun je
ook je shell dit voor je laten doen. Één van de manieren waarop dat kan is met
een until
block.
De meeste mensen die met Bash werken zijn wel bekend met het fenomeen “Command
Substitiuion”; Je zet in een commandline een commoando tussen $(
en )
, of
tussen backticks `
, en dat stuke van je commandline wordt vervangen door
de output van dat commando.
Nu zijn er helaas situaties waar je die output in een (tijdelijk) bestand nodig hebt voor een ander commando, en je niet moeilijk wilt doen met het herschikken van file-descriptors of het zelf aanmaken van tijdelijke bestanden. In die gevallen kun je gebruik maken van “Process Substitution”, waarbij Bash zelf voor de tijdelijke bestanden zorgt in de vorm van named pipes.
Bijna iedereen die met Bash werkt kent de magische variabele $?
wel, met daarin de exit-code van je meest recente commando. Maar wist je dat ook de individuele exit-codes van de onderdelen van een pipeline kunt bekijken?
Sinds RHEL9 heeft de standaard .bashrc
voor nieuwe gebruikers een trucje
geleerd: Het laden van bestanden uit de ~/.bashrc.d
directory.
Hiermee is het mogelijk om geen custom monolithisch .bashrc
bestand meer bij
te houden, met alle nare neveneffecten van dien wanneer je gaat automatiseren,
maar om over te stappen op een modulair systeem, waarbij je gewoonweg de goede
bestanden voor de gewenste functionaliteit kopieert naar de juiste systemen.