$> set -o pipefail
$> fortune | head -1 > /dev/null && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!" || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
ΠΠΎΠ²Π΅Π·Π»ΠΎ!
$> fortune | head -1 > /dev/null && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!" || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ
est fortune
conditionalis progressio sine exit(rand())
.
Potesne explicare? quid mali hic??
Digressio lyrico-historica
Hanc Heisenbug primum ante saeculum quartam cognoui. Deinde ad portam in FaxNET plures utilitates per creare necesse erat
Antecedens experientia mea tractandi cum cimicibus in sendmail et uupc/uupc addita diligentiae meae in "pertractatione erroris." Nihil in singulis illius fabulae tribuo, sed cum hoc Heisenbug per duas septimanas 10-14 horas luctatus sum. Ideo memoratum est, et hesterno die ista vetus notitia impedita est iterum visitare.
TL, DR Answer
utilitas head
potes claude alveum fortune
simul mox primam aciem legit. Si fortune
outputs plus quam una linea, tunc vocationi correspondens write()
reddet errorem vel famam pauciores bytes es output quam postulavit. Rursus diligenti errore pertractatio scripta fortune
ius habet hanc condicionem considerandi in suo statu exitus. Tum propter institutionem set -o pipefail
non operatur || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
.
autem, head
non potest facere in tempore claudere ante fortune
notitia outputting consummans. Tum erit opus && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!"
.
In uno meae hodie GNUMakefile
echo '#define MDBX_BUILD_COMPILER "$(shell set -o pipefail; $(CC) --version | head -1 || echo 'Please use GCC or CLANG compatible compiler')"'
Translata in hominem
Est hic commune --version
quaerit quis sit, et si optio non sustinetur, stipulam interponi "Quaeso uti GCC vel CLANG compilator compilator".
tamquam
#define MDBX_BUILD_COMPILER "lcc:1.23.20:Sep--4-2019:e2k-v3-linux Please use GCC or CLANG compatible compiler"
Ingenue, non statim agnovi veterem meam "notam". Etiam consilium in Elbro pluries probatum est et sub multa distributione diversa, inter Att. Cum variis compilatoribus, versionibus GNU Fac et vercundus. Ergo errorem meum hic videre non volui.
Cum problemam effingere conatur et/vel intelligere quid ageretur, mirabiliora fieri coepta sunt.
Praecipe line carmine;
echo "#define MDBX_BUILD_COMPILER '$(set -o pipefail; LC_ALL=C cc --version | head -1 || echo "Please use GCC or CLANG compatible compiler")'"
Singula nunc et tunc extra textum produceret, non... Saepe una optionum satis diu haereret, sed si diutius futui, semper utrumque obtinuit!
Scilicet, strace
Viam, ut quaelibet de se strace
mavult non effingere.
Quid igitur agitur?
- utilitas
head
ius habet (immo etiam coactum) ad claudendum alveum legebatur ut primum numerum versuum rogatus legerit. - Notitia-programma generandi scriptor (in hoc casu
cc
) potes figuras plures lineas et Liber hoc per plures vocatwrite()
. - si lector erit tempus claudendi alveum suum ante finem notandi in latere scriptoris, tunc scriptor errorem recipiet.
- Scriptor progressio potes et canalem ignorare errorem scribe et in codice tuo complementum cogita.
- Ob institutionem
set -o pipefail
codice perfectio pipelinea non nulla (erronea) erit si effectus non-nullam ex uno saltem elemento efficiet et tunc operabitur.|| echo "Please use GCC or CLANG compatible compiler"
.
Variationes esse possunt secundum quomodo scriptor programmata cum significationibus operatur. Exempli gratia, progressio enormis terminare potest (generationi latae non-nullae/errore status terminationis), vel write()
reddet eventus scribere paucioribus bytes quam rogatus et profectus errno = EPIPE
.
Quis est reprehendo?
In casu descriptus paulum ab omnibus. Error pertractatio in cc
(lcc:1.23.20:Sepβ4-2019:e2k-v3-linux) Non redundans. In multis casibus melius est cavere in parte errare, quamvis haec repentina vitia in boilerplate ad mores institutos exponat.
Quid faciam?
nefas:
fortune | head -1 && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ, Π½ΠΎ Π²Ρ ΡΠΈΡΠΊΡΠ΅ΡΠ΅!" || echo "WTF?"
corrigere;
-
(fortune && echo "Π£ΡΠΏΠ΅ΡΠ½ΠΎ" || echo "ΠΡΠΈΠ±ΠΊΠ°") | head -1
Hic mane clausura tibiae ab interprete jubente agetur cum in parenthesi nidos ("intra" parenthesi operam daturus est. Proinde, if
fortune
referat errorem scribendo ad alveum clausum in statu, deinde output|| echo "ΠΡΠΈΠ±ΠΊΠ°"
non alicubi, cum canalis iam clausus est. -
fortune | cat - | head -1 && echo "Π£ΡΠΏΠ΅ΡΠ½ΠΎ" || echo "ΠΡΠΈΠ±ΠΊΠ°"
Hic est utilitas
cat
agit damper quia ignorat erroremEPIPE
ad receptum angustias. Hoc satis est nunc conclusionemfortune
parvae (plures lineae) et in quiddam canali vicium (ab 512 ad bytes ad β64K, in plerisque OS β₯4K). Aliter problema redeat.
Quomodo aliquid recte? EPIPE
aliosque uetustos errores ?
Recta solutione non est una, sed sunt commendationes simplices;
EPIPE
requiratur ut processionaliter (Exitus status et reflectitur) cum outputting notitia quod integritas requirit. Exempli gratia, in operatione archivi vel tergum utilitatum.EPIPE
melius ignorare Cum nuntia et auxilia nuntians. Exempli gratia, informationes de optionibus ostendens--help
aut--version
.- Si signum crescendo adhiberi potest in pipeline prius
| head
tumEPIPE
Melius est ignorare, aliter melius est procedere et considerare in exitu status.
Vellem hanc occasionem exprimere meam gratiam in iugis
Serva eam Camarades, usque
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
KDPV from
Source: www.habr.com