Post by De ongekruisigdePost by OscarPost by De ongekruisigdeweet je dat echt niet? ( hint: tik eens which true )
Wat een ontzettend nutteloos en ook nog eens fout antwoord.
Nou... Als je niet beseft dat : voor true staat en dat true
gewoon een commando is dat in een waarde in ${?} resulteert dan
zou je misschien op het spoor van Cecil eindigen.
Waarom zou `which true` Cecil op het spoor kunnen brengen?
Met 'which' zoek je via het pad naar 'true' waardoor je uitkomt
op /bin/true. Dat is een externe executable die interdaad niet veel meer
doet dan een 0 als exit value. Dit in tegenstelling tot de : wat een
shell builtin van bash is. Net als 'true' trouwens. Kijk maar eens wat
'type true' oplevert.
Net als bijvoorbeeld echo heb je dus twee varianten. De builtin van bash
(die je krijgt als je 'echo' zonder pad gebruikt) en /bin/echo.
Maar dan komen we bij ':'. Jij zegt dat nu dat voor true staat, maar dat
klopt ook al niet, hoewel dat meer een semantische kwestie is. Kijk maar:
$ help true
true: true
Return a successful result.
Exit Status:
Always succeeds.
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
Zoals je ziet heeft 'true' een functie. Het returned expliciet 'Success'.
De : daarentegen is een 'null command', dat altijd succesvol afloopt.
Het effect is hetzelfde. Cecil had dus ook 'sa-update || true' kunnen
schrijven. Ik vind zelfs dat dat minder cryptisch is, dus beter.
Maar dan nog. Zelfs al zou enige variant /bin/true aanroepen, dan nog
was dat niet het antwoord op de vraag waarom de resultaten verschillen.
Het enige juiste antwoord heb ik daarnet gegeven. Het verschil komt
doordat bash zelf al een fout geeft op het evalueren van $((1/0))
voordat de regel uitgevoerd kan worden.
Daar verandert geen 'which /bin/true' iets aan.
Post by De ongekruisigdeNiet het pad naar true maar het feit dat je uit het bestaan van
dat pad kan afleiden true geen shell built-in is maar een extern
commando dat een resultaat code in ${?} zet. Enigszins cryptisch
misschien maar komaan zeg, welk niveau heeft men hier (*)?
Het is dus niet eens een extern commando. En de hint leidt af van het
werkelijke probleem. Ook al vervang je alle dubbele punten door
/bin/true, dan nog krijg je het merkwaardige verschil tussen beide
varianten.
Post by De ongekruisigde(*) uit jouw uitleg in een ander antwoord leid ik af dat jij in
deze wel weet waarover je 't hebt.
Dank. :-)
--
[J|O|R] <- .signature.gz