Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done
true en false zijn geen boolean types maar functies. true gaat altijd goed, false altijd fout.
http://linux.die.net/man/1/false
http://linux.die.net/man/1/false
[ Voor 16% gewijzigd door bronce op 25-05-2014 12:30 ]
Verwijderd
Je bent nu eigenlijk exit codes aan het bekijken. Gebruik dus $?
Bash:
1
2
3
4
5
6
7
8
9
10
| #! /bin/bash status() { [ $? -eq 0 ] && echo "OK" || echo "FAIL" } $(true); status $(false); status exit 0 |
De commando's true en false geven een exit code resp. gelijk en ongelijk aan 0 terug, maar ze produceren geen output, dus $(true) en $(false) zijn lege strings. Met
Je kunt dus het commando zelf als parameter meegeven -- of als meerdere parameters zoals met sudo -- en het dan binnen je functie uitvoeren om de return value te checken:
Bash:
gebruik je die lege string als commando in een pipeline. Ik kan het verschil tussen $1 met of zonder quotes (wat voor brackets bedoelde je precies?) niet precies uitleggen, maar zonder quotes lijkt het als speciaal geval behandeld te worden (wat dus true geeft) en met krijg je "command not found" omdat je het commando "" probeert uit te voeren.1
| $1 && echo OK || echo FAIL |
Je kunt dus het commando zelf als parameter meegeven -- of als meerdere parameters zoals met sudo -- en het dan binnen je functie uitvoeren om de return value te checken:
Bash:
1
2
3
| status () { "$@" && echo OK || echo FAIL } |
Functies die booleans uitpoepen, toch? (typische Unix-humor trouwens, de man-pages van die tweebronce schreef op zondag 25 mei 2014 @ 12:29:
true en false zijn geen boolean types maar functies. true gaat altijd goed, false altijd fout.
http://linux.die.net/man/1/false
Cheatah en Raynman bedankt! Soms zit je gewoon klem in een manier van denken, beide oplossingen werken maar die van Cheatah is bruikbaarder in mijn scripts.
Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done
Moet het een boolean wezen, of mag het ook een variabele zijn die twee mogelijke waardes heeft? Want daarmee kan je ook werken. Bovenaan je script definieer je 'm (var="") en je vult 'm telkens met een van de twee waardes die je wilt (0/1 of true/false). Aan het einde van de functie geef je 't de waarde die 't moet zijn en verderop in het script wordt die waarde uitgelezen, totdat je 'm weer verandert met je functie.
Commandline FTW | Tweakt met mate
Pagina: 1