$> set -o pipefail
$> fortune | head -1 > /dev/null && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!" || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
ΠΠΎΠ²Π΅Π·Π»ΠΎ!
$> fortune | head -1 > /dev/null && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!" || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ
izany fortune
programa misy fepetra tsy misy exit(rand())
.
Afaka manazava ve ianao? inona no tsy mety eto?
Fandihizana ara-tantara
Nahafantatra voalohany an'io Heisenbug io aho tamin'ny ampahefatry ny taonjato lasa. Avy eo ho an'ny vavahady ao amin'ny FaxNET dia ilaina ny mamorona fitaovana maro amin'ny alΓ lan'ny
Ny traikefako teo aloha momba ny fiatrehana ireo bibikely ao amin'ny sendmail sy uucp/upc dia nanampy tamin'ny fahazotoako tamin'ny "fikarakarana ny fahadisoana tanteraka." Tsy misy dikany ny mitsoraka amin'ny antsipirihan'io tantara io, fa nitolona tamin'ity Heisenbug ity aho nandritra ny tapa-bolana nandritra ny 10-14 ora. Noho izany, notsiahivina, ary omaly indray ity olom-pantatra taloha ity no nitsidika indray.
TL; DR valiny
Utility head
afaka akatona ny fantsona avy fortune
ΡΡΠ°Π·Ρ raha vao mamaky ny andalana voalohany izy. RAHA fortune
dia mamoaka andalana mihoatra ny iray, avy eo ny antso mifanaraka aminy write()
dia hamerina hadisoana na tatitra fa vitsy kokoa ny bytes mivoaka noho ny nangatahana. Ho setrin'izany, nosoratana tamin'ny fikarakarana fahadisoana tsara fortune
manan-jo haneho izany toe-javatra izany amin'ny sata fivoahany. Avy eo noho ny fametrahana set -o pipefail
dia hiasa || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
.
Na izany aza, head
mety tsy ho tonga ara-potoana akaiky aloha fortune
dia hamita ny famoahana angona. Dia hiasa izany && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!"
.
Amin'ny iray amin'izao andro izao GNUMakefile
echo '#define MDBX_BUILD_COMPILER "$(shell set -o pipefail; $(CC) --version | head -1 || echo 'Please use GCC or CLANG compatible compiler')"'
Nadika ho olombelona
Efa mahazatra eto ny --version
dia manontany hoe iza izy, ary raha tsy tohanana ilay safidy dia asiana stub "Ampiasao azafady GCC na CLANG compiler compatible".
Tahaka izany
#define MDBX_BUILD_COMPILER "lcc:1.23.20:Sep--4-2019:e2k-v3-linux Please use GCC or CLANG compatible compiler"
Raha ny marina, dia tsy nahafantatra avy hatrany ny βfahalalakoβ taloha aho. Ankoatr'izay, ny tetikasa dia efa nosedraina imbetsaka tao amin'ny Elbrus ary tamin'ny fizarana maro samihafa, anisan'izany ny Alt. Miaraka amin'ny compiler isan-karazany, dikan-tenin'ny GNU Make sy bash. Noho izany, tsy te hahita ny fahadisoako eto aho.
Rehefa nanandrana namerina ny olana sy/na mahatakatra ny zava-mitranga, dia nanomboka nisy zavatra hafahafa kokoa.
Tsipelina andalana baiko:
echo "#define MDBX_BUILD_COMPILER '$(set -o pipefail; LC_ALL=C cc --version | head -1 || echo "Please use GCC or CLANG compatible compiler")'"
Indraindray dia hamokatra lahatsoratra fanampiny, avy eo tsy ... Matetika ny iray amin'ireo safidy dia mijanona ela be, fa raha mitsambikina lava kokoa ianao dia mahazo roa foana!
Mazava ho azy, strace
Raha ny tokony ho izy, toy ny manaja tena strace
aleony tsy miteraka.
Dia inona no mitranga?
- Utility
head
manana zo (na ny marimarina kokoa aza, voatery) hanidy ny fantsona vakina raha vao mamaky ny isan'ny andalana nangatahana. - Mpanoratra programa mpamokatra data (amin'ity tranga ity
cc
) afaka manonta tsipika maromaro ary maimaim-poana manao izany amin'ny alalan'ny antso marowrite()
. - raha ny mpamaky dia hanana fotoana hanidy ny fantsona eo anilany alohan'ny fiafaran'ny fandraisam-peo eo amin'ny lafiny mpanoratra, dia hahazo fahadisoana ny mpanoratra.
- Programa mpanoratra manana ny zo samy tsy miraharaha ny fahadisoana manoratra ny fantsona ary maneho izany ao amin'ny kaody famitanao.
- Noho ny fametrahana
set -o pipefail
ny kaody famenoana fantsona dia tsy aotra (diso) raha tsy aotra ny vokatra avy amin'ny singa iray farafaharatsiny, ary avy eo dia hiasa|| echo "Please use GCC or CLANG compatible compiler"
.
Mety hisy fiovaovana miankina amin'ny fomba fiasan'ny programa mpanoratra miaraka amin'ny famantarana. Ohatra, mety hifarana amin'ny fomba tsy ara-dalΓ na ny programa (miaraka amin'ny famoronana automatique tsy aotra/fahadisoana sata famaranana), na write()
dia hamerina ny vokatry ny fanoratana bytes vitsy kokoa noho ny nangatahana sy napetraka errno = EPIPE
.
Iza no meloka?
Amin'ny tranga voalaza kely ny zavatra rehetra. Hadisoana amin'ny fitantanana cc
(lcc:1.23.20:Sepβ4-2019:e2k-v3-linux) tsy miverimberina. Amin'ny toe-javatra maro dia tsara kokoa ny manao fahadisoana amin'ny lafiny fitandremana, na dia mampiseho lesoka tampoka eo amin'ny boilerplate natao ho an'ny fitondran-tena mahazatra aza izany.
Inona no tokony ataoko?
Diso:
fortune | head -1 && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ, Π½ΠΎ Π²Ρ ΡΠΈΡΠΊΡΠ΅ΡΠ΅!" || echo "WTF?"
hanitsy:
-
(fortune && echo "Π£ΡΠΏΠ΅ΡΠ½ΠΎ" || echo "ΠΡΠΈΠ±ΠΊΠ°") | head -1
Eto, ny fanakatonana sodina aloha dia hokarakarain'ny mpandika teny baiko rehefa mikarakara ny fantsona misy akany ("ao anatin'ny" fononteny). Araka izany, raha
fortune
dia hitatitra fahadisoana an-tsoratra amin'ny fantsona mihidy ao amin'ny sata, dia ny vokatra|| echo "ΠΡΠΈΠ±ΠΊΠ°"
tsy ho tonga na aiza na aiza, satria efa mihidy ny fantsona. -
fortune | cat - | head -1 && echo "Π£ΡΠΏΠ΅ΡΠ½ΠΎ" || echo "ΠΡΠΈΠ±ΠΊΠ°"
Ity ny utility
cat
miasa toy ny damper satria tsy miraharaha ny fahadisoanaEPIPE
rehefa misintona. Ampy izay ho fehin-kevitra izaofortune
kely (andalana maromaro) ary mifanaraka amin'ny buffer fantsona (avy amin'ny 512 bytes ka hatramin'ny β64K, amin'ny ankamaroan'ny OS β₯4K). Raha tsy izany dia mety hiverina ny olana.
Ahoana ny fikarakarana tsara EPIPE
sy ny fahadisoana hafa momba ny firaketana?
Tsy misy vahaolana tokana tokana, fa misy soso-kevitra tsotra:
EPIPE
ilaina tsy maintsy karakaraina (ary hita taratra amin'ny sata fivoahana) rehefa mamoaka angon-drakitra mitaky fahamendrehana. Ohatra, mandritra ny fiasan'ny archiver na fitaovana backup.EPIPE
aleo tsinontsinoavina rehefa mampiseho fampahalalana sy hafatra fanampiny. Ohatra, rehefa mampiseho fampahalalana momba ny safidy--help
na--version
.- Raha ny code novolavolaina dia azo ampiasaina amin'ny fantsona mialoha
| head
, thenEPIPE
Tsara kokoa ny tsy miraharaha, raha tsy izany dia tsara kokoa ny mandinika sy mandinika ny sata fivoahana.
Te-hanararaotra izao fotoana izao aho hanehoana ny fankasitrahana ny ekipa
Tohizo izany ry Camarades, ambony
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
KDPV avy amin'ny
Source: www.habr.com