$> set -o pipefail
$> fortune | head -1 > /dev/null && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!" || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
ΠΠΎΠ²Π΅Π·Π»ΠΎ!
$> fortune | head -1 > /dev/null && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!" || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ
waa fortune
barnaamij shuruud la'aan ah exit(rand())
.
Ma sharaxi kartaa? maxaa ka qaldan halkan?
Qoob-ka-cayaar-taariikheed
Waxaan markii ugu horreysay bartay Heisenbug-gan rubuc qarni ka hor. Kadibna albaabka FaxNET waxa lagama maarmaan noqotay in la abuuro adeegyo badan oo loo maro
Waayo-aragnimadaydii hore ee wax ka qabashada dhiqlaha emailka iyo uucp/uupc ayaa igu daray dadaalkayga "xakamaynta khaladka saxda ah." Ma jirto wax macno ah oo lagu quusinayo tafaasiisha sheekadaas, laakiin waxaan la halgamay Heisenbug-gan laba toddobaad 10-14 saacadood. Sidaa darteed, waa la xusuustay, oo shalay odaygan is-yaqaana ah ayaa joojiyay inuu mar kale soo booqdo.
TL; Jawaabta DR
Faa'iidada head
awooddo kanaalka ka xidh fortune
Isla markiiba isla marka uu akhriyo safka hore. Hadii fortune
soo saara wax ka badan hal xariiq, ka dibna wacitaanka u dhigma write()
waxay soo celin doontaa khalad ama waxay soo sheegi doontaa in bytes ka yar inta la codsaday. Dhanka kale, qoraal si taxadar leh u maamula qaladka fortune
waxay xaq u leedahay inay xaaladan ka tarjumto xaaladeeda bixitaan. Markaas ay sabab u tahay rakibidda set -o pipefail
shaqayn doona || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
.
Si kastaba ha ahaatee, head
waxaa laga yaabaa in aysan ku dhicin waqtiga hore u dhow fortune
dhamayn doona soo saarista xogta. Markaa way shaqayn doontaa && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!"
.
Mid ka mid ah maanta GNUMakefile
echo '#define MDBX_BUILD_COMPILER "$(shell set -o pipefail; $(CC) --version | head -1 || echo 'Please use GCC or CLANG compatible compiler')"'
Waxaa loo turjumay dad
Waa wax caadi ah halkan --version
waxay waydiinaysaa cidda uu yahay, haddii ikhtiyaarka aan la taageerin, markaa suunka ayaa la gelinayaa "Fadlan isticmaal GCC ama CLAG compiler ku habboon".
Sida
#define MDBX_BUILD_COMPILER "lcc:1.23.20:Sep--4-2019:e2k-v3-linux Please use GCC or CLANG compatible compiler"
Si daacadnimo ah, isla markiiba ma aqoonsan "is-barashadaydii" hore. Waxaa intaa dheer, mashruuca ayaa marar badan lagu tijaabiyay Elbrus iyo qaybo badan oo kala duwan, oo ay ku jiraan Alt. Iyada oo leh isku-dubaridyo kala duwan, noocyada GNU Make iyo bash. Sidaa darteed, ma aanan rabin inaan halkan ku arko khaladkayga.
Markaad isku dayeyso inaad dib u soo saarto dhibaatada iyo/ama fahamto waxa socda, waxyaabo badan oo yaab leh ayaa bilaabay inay dhacaan.
higaada khadka taliska:
echo "#define MDBX_BUILD_COMPILER '$(set -o pipefail; LC_ALL=C cc --version | head -1 || echo "Please use GCC or CLANG compatible compiler")'"
Had iyo jeer waxay soo saari doontaa qoraal dheeri ah, ka dibna maaha... Inta badan mid ka mid ah xulashooyinka ayaa ku sii jiri doona wakhti dheer, laakiin haddii aad dheeraato, marwalba waxaad heleysaa labadaba!
Dabcan, strace
By habka, sida qof kasta oo is-ixtiraamaya strace
door biday in aanu taran.
Haddaba maxaa dhacaya?
- Faa'iidada
head
waxay xaq u leedahay (ama halkii, xataa waa lagu qasbay) inuu xidho kanaalka la akhrinayo isla marka uu akhriyo tirada la codsaday. - Qoraaga barnaamijka xog-ururinta (kiiskan
cc
) awooddo daabac khadadka badan iyo bilaasha tan ku samee wicitaano badanwrite()
. - haddii akhristuhu wuxuu heli doonaa wakhti uu ku xidho kanaalka dhinaciisa ka hor dhamaadka duubista dhinaca qoraaga, ka dibna qoraagu wuxuu heli doonaa qalad.
- Barnaamijka qoraaga Xaq u leeyahay Labaduba iska indhatiraan kanaalka inay qoraan khalad oo ka turjumaan koodkaaga dhammaystirka.
- Rakibaadda awgeed
set -o pipefail
koodka dhamaystirka dhuumaha wuxuu noqonayaa mid aan eber ahayn (khalad ah) haddii natiijadu tahay eber ka mid ah ugu yaraan hal element, ka dibna way shaqayn doontaa|| echo "Please use GCC or CLANG compatible compiler"
.
Waxaa jiri kara kala duwanaansho ku xiran tahay sida barnaamijka qoraagu ugu shaqeeyo calaamadaha. Tusaale ahaan, barnaamijku wuxuu u joojin karaa si aan caadi ahayn (oo leh jiil toos ah oo aan eber ahayn/qalada joojin), ama write()
waxay soo celin doontaa natiijada qorista bytes ka yar intii la codsaday oo dejin doonta errno = EPIPE
.
Yaa dambiile ah?
Xaaladda la tilmaamay wax kasta oo yar. Khalad wax ka qabashada cc
(lcc:1.23.20:Sepβ4-2019:e2k-v3-linux) ma ahan xad dhaaf ah. Marar badan way fiican tahay in laga qaldamo dhinaca taxadarka, in kasta oo tani ay soo bandhigayso cilladaha lama filaanka ah ee kuleyliyaha loogu talagalay habdhaqan dhaqameed.
Maxaa la sameeyaa?
Khalad
fortune | head -1 && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ, Π½ΠΎ Π²Ρ ΡΠΈΡΠΊΡΠ΅ΡΠ΅!" || echo "WTF?"
Sax ah:
-
(fortune && echo "Π£ΡΠΏΠ΅ΡΠ½ΠΎ" || echo "ΠΡΠΈΠ±ΠΊΠ°") | head -1
Halkan, xidhitaanka hore ee tuubada waxa maamuli doona tarjumaanka taliska marka uu shaqaynayo dhuumaha buulka leh ("gudaha" qawladaha). Sidaas awgeed, haddii
fortune
wuxuu u sheegi doonaa qalad qoraal ah kanaalka xiran ee xaaladda, ka dibna wax soo saarka|| echo "ΠΡΠΈΠ±ΠΊΠ°"
meelna ma gaari doonto, maadaama kanaalka mar hore la xiray. -
fortune | cat - | head -1 && echo "Π£ΡΠΏΠ΅ΡΠ½ΠΎ" || echo "ΠΡΠΈΠ±ΠΊΠ°"
Waa kan utility-ga
cat
waxay u dhaqantaa sidii qoyaan badan sababtoo ah way iska indhatirtaa khaladkaEPIPE
marka laga baxo. Tani waa ku filan hadda gabagabadafortune
yar yar (dhowr khad) oo ku habboon kaydiyaha kanaalka (laga bilaabo 512 bytes ilaa β64K, inta badan OS β₯4K). Haddii kale dhibaatadu way soo noqon kartaa.
Sida saxda ah ee loo habeeyo EPIPE
iyo khaladaadka kale ee duubista?
Ma jiro hal xal oo sax ah, laakiin waxaa jira talooyin fudud:
EPIPE
loo baahan yahay waa in la farsameeyaa (oo ka muuqda heerka bixitaanka) marka la soo saarayo xogta u baahan daacadnimo. Tusaale ahaan, inta lagu jiro hawlgalka kaydinta ama kaydka utilities.EPIPE
fiican in la iska indhatiro marka la soo bandhigayo macluumaadka iyo fariimaha caawinta. Tusaale ahaan, marka la soo bandhigayo macluumaadka xulashooyinka--help
ama--version
.- Haddii koodka la soo saarayo hore loo isticmaali karo dhuumaha
| head
, ka dibnaEPIPE
Way fiicantahay in la iska indhatiro, haddii kale way fiicantahay in la farsameeyo oo la muujiyo heerka bixitaanka.
Waxaan jeclaan lahaa inaan ka faa'iidaysto fursadan si aan ugu mahadceliyo kooxaha
Ka sii wad Camarades, kor
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
KDPV ka
Source: www.habr.com