$> set -o pipefail
$> fortune | head -1 > /dev/null && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!" || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
ΠΠΎΠ²Π΅Π·Π»ΠΎ!
$> fortune | head -1 > /dev/null && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!" || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ
zviri fortune
conditional program pasina exit(rand())
.
Unogona here kutsanangura? chii chiri kunetsa apa?
Lyrical-nhoroondo digression
Ndakatanga kuziva iyi Heisenbug chikamu chezana remakore rapfuura. Zvino kune gedhi muFaxNET zvaive zvakakodzera kugadzira akati wandei maturusi kuburikidza
Chiitiko changu chekare chekubata nemabhugi mune sendmail uye uucp/uupc yakawedzera kune yangu kushingaira mu "kunyatso gadzirisa kukanganisa." Iko hakuna chikonzero chekunyura mune izvo zvenyaya, asi ndakanetseka neHeisenbug iyi kwemavhiki maviri kwemaawa gumi nemana. Naizvozvo, zvakarangarirwa, uye nezuro uyu muzivikanwi akapfuura kuti ashanyire zvakare.
TL;DR Mhinduro
Zvinobatsira head
may vhara chiteshi kubva fortune
ipapo paanongoverenga mutsara wekutanga. Kana fortune
inoburitsa mutsara unopfuura mumwechete, kozoti runhare rwunoenderana write()
ichadzosa kukanganisa kana kuzivisa kuti mashoma mabhayiti anobuda pane zvakumbirwa. Zvakare, yakanyorwa nekungwarira kubata kukanganisa fortune
ine kodzero yekuratidza mamiriro ezvinhu aya mukubuda kwayo. Zvadaro nekuda kwekuiswa set -o pipefail
zvichashanda || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
.
Zvisinei, head
haugone kuzviita nenguva kuvhara kare fortune
ichapedza kuburitsa data. Zvadaro zvichashanda && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!"
.
Mune imwe yangu nhasi GNUMakefile
echo '#define MDBX_BUILD_COMPILER "$(shell set -o pipefail; $(CC) --version | head -1 || echo 'Please use GCC or CLANG compatible compiler')"'
Yakaturikirwa mumunhu
Zvakajairika pano --version
inobvunza kuti ndiani, uye kana sarudzo isingatsigirwi, ipapo stub inoiswa "Ndokumbira ushandise GCC kana CLANG inoenderana compiler".
Kufanana
#define MDBX_BUILD_COMPILER "lcc:1.23.20:Sep--4-2019:e2k-v3-linux Please use GCC or CLANG compatible compiler"
Kutaura chokwadi, handina kukurumidza kuziva βmuzivikanwiβ wangu wekare. Uyezve, purojekiti yakatoedzwa kakawanda paElbrus uye pasi pekugovera kwakasiyana kwakasiyana, kusanganisira Alt. Nemakongiresi akasiyana-siyana, shanduro dzeGNU Gadzira uye bash. Naizvozvo, ndakanga ndisingadi kuona kukanganisa kwangu pano.
Pakuedza kuburitsa dambudziko uye/kana kunzwisisa zvaiitika, zvimwe zvinhu zvinoshamisa zvakatanga kuitika.
Command line spell:
echo "#define MDBX_BUILD_COMPILER '$(set -o pipefail; LC_ALL=C cc --version | head -1 || echo "Please use GCC or CLANG compatible compiler")'"
Nguva nenguva yaibva yaburitsa mamwe mavara, kwete... Kazhinji imwe yesarudzo yairamba ichimira kwenguva yakati rebei, asi kana ukatora nguva yakareba, waigara uchiwana zvese!
Ichokwadi, strace
Nenzira, sekuzviremekedza kupi zvako strace
anofarira kusabereka.
Saka chii chiri kuitika?
- Zvinobatsira
head
ine kodzero (kana kuti, inotomanikidzwa) kuvhara chiteshi chiri kuverengwa painongoverenga nhamba yakakumbirwa yemitsara. - Iyo data-inogadzira chirongwa-munyori (mune iyi kesi
cc
) may dhinda mitsetse yakawanda uye vakasununguka ita izvi kuburikidza nekufona kwakawandawrite()
. - kana muverengi achawana nguva yekuvhara chiteshi parutivi rwake kusati kwapera kurekodha kudivi remunyori, ipapo munyori achawana kukanganisa.
- Chirongwa chemunyori kodzero yeku zvese furatira chikanganiso chekunyora chiteshi uye chiratidze mukodhi yako yekupedzisa.
- Nekuda kwekuisa
set -o pipefail
iyo pombi yekupedzisa kodhi ichave isiri zero (yakakanganisa) kana mhedzisiro isiri zero kubva pane imwechete chinhu, uyezve ichashanda.|| echo "Please use GCC or CLANG compatible compiler"
.
Panogona kuve nekusiyana zvichienderana nekuti chirongwa chemunyori chinoshanda sei nemasaini. Semuyenzaniso, chirongwa chinogona kupera zvisina tsarukano (nekuzvigadzira otomatiki kweiyo isiri zero/kukanganisa kumisa chimiro), kana write()
ichadzorera mhedzisiro yekunyora mashoma mabhaiti pane akumbirwa uye kuseta errno = EPIPE
.
Ndiani ane mhosva?
Muchiitiko chakatsanangurwa zvishoma zvezvose. Kukanganisa kubata mukati cc
(lcc:1.23.20:Sepβ4-2019:e2k-v3-linux) kwete redundant. Muzviitiko zvakawanda zviri nani kukanganisa padivi rekuchenjerera, kunyangwe izvi zvichiburitsa zvikanganiso zvakangoerekana zvaitika mubhoilerplate yakagadzirirwa maitiro echinyakare.
Chii chandinofanira kuita?
Zvakashata:
fortune | head -1 && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ, Π½ΠΎ Π²Ρ ΡΠΈΡΠΊΡΠ΅ΡΠ΅!" || echo "WTF?"
Zvakarurama:
-
(fortune && echo "Π£ΡΠΏΠ΅ΡΠ½ΠΎ" || echo "ΠΡΠΈΠ±ΠΊΠ°") | head -1
Pano, kuvhara kwepombi kwekutanga kuchabatwa nemuturikiri wekuraira paunenge uchisevha pombi yakagara ("mukati" maparentheses). Naizvozvo, kana
fortune
inoshuma kukanganisa mukunyora kune yakavharwa chiteshi mune iyo mamiriro, ipapo zvinobuda|| echo "ΠΡΠΈΠ±ΠΊΠ°"
hapana kwainosvika, sezvo gwara rakatovharwa. -
fortune | cat - | head -1 && echo "Π£ΡΠΏΠ΅ΡΠ½ΠΎ" || echo "ΠΡΠΈΠ±ΠΊΠ°"
Heino utility
cat
inoshanda seyakanyorova nekuti inofuratira kukanganisaEPIPE
pakubvisa. Izvi zvakwana for now mhedzisofortune
diki (mitsetse yakati wandei) uye inokodzera mugero buffer (kubva pa512 bytes kusvika β64K, mune yakawanda OS β₯4K). Zvikasadaro dambudziko rinogona kudzoka.
Maitiro ekugadzirisa nemazvo EPIPE
nezvimwe zvikanganiso zvekurekodha?
Iko hakuna mhinduro imwechete yakarurama, asi kune mazano akareruka:
EPIPE
inodikanwa inofanira kugadziriswa (uye inoratidzwa muchimiro chekubuda) paunenge uchiburitsa data inoda kuvimbika. Semuenzaniso, panguva yekushanda kwearchives kana backup utilities.EPIPE
zviri nani kufuratira pakuratidza ruzivo uye mameseji ebetsero. Semuenzaniso, paunenge uchiratidza ruzivo pane zvingasarudzwa--help
kana--version
.- Kana iyo kodhi iri kugadzirwa inogona kushandiswa mupombi pamberi
| head
, ipapoEPIPE
Zviri nani kufuratira, kana zvisina kudaro zviri nani kugadzirisa uye kuratidza muchimiro chekubuda.
Ndinoda kutora mukana uno kuratidza kutenda kwangu kuzvikwata
Ramba wakadaro Camarades, kumusoro
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
KDPV kubva
Source: www.habr.com