$> set -o pipefail
$> fortune | head -1 > /dev/null && echo "Повезло!" || echo "Вы проиграли"
Повезло!
$> fortune | head -1 > /dev/null && echo "Повезло!" || echo "Вы проиграли"
Вы проиграли
ke fortune
lenaneo le nang le maemo ntle le exit(rand())
.
A na u ka hlalosa? phoso ke efe mona?
Phapang ea mantsoe-ea nalane
Ke qalile ho tloaelana le Heisenbug ena lilemong tse lekholo tse fetileng. Ebe bakeng sa heke ho FaxNET ho ne ho hlokahala ho theha lisebelisoa tse 'maloa ka
Phihlelo ea ka ea nakong e fetileng ea ho sebetsana le likokoana-hloko ho sendmail le uucp/uupc e ekelitse boikitlaetso ba ka ba "ho sebetsana le liphoso ka botlalo." Ha ho na thuso ea ho kenella ka lintlha tsa pale eo, empa ke ile ka loana le Heisenbug ena ka libeke tse peli bakeng sa lihora tse 10-14. Ka hona, e ile ea hopoloa, 'me maobane motsoalle enoa oa khale o ile a feta ho etela hape.
TL; DR Karabo
Tšebeliso head
ka koala kanale ho tloha fortune
hang hang feela ha a bala mola wa pele. Haeba fortune
e hlahisa mela e fetang o le mong, ebe call e tsamaellanang write()
e tla khutlisa phoso kapa e tlaleha hore li-byte tse fokolang li hlahisoa ho feta kamoo u li kopileng. Ka lehlakoreng le leng, e ngotsoe ka hloko ho sebetsana le liphoso fortune
e na le tokelo ea ho bonahatsa boemo bona boemong ba eona ba ho tsoa. Ebe ka lebaka la ho kenya set -o pipefail
tla sebetsa || echo "Вы проиграли"
.
Leha ho le joalo, head
e ka se fihle ka nako koala pele fortune
e tla qeta ho ntša data. Joale e tla sebetsa && echo "Повезло!"
.
Ho e 'ngoe ea ka kajeno GNUMakefile
echo '#define MDBX_BUILD_COMPILER "$(shell set -o pipefail; $(CC) --version | head -1 || echo 'Please use GCC or CLANG compatible compiler')"'
E fetoletsoe ho motho
Ho tloaelehile mona bakeng sa --version
e botsa hore na ke mang, 'me haeba khetho e sa tšehetsoe, joale ho kenngoa stub "Ka kopo sebelisa pokello e lumellanang ea GCC kapa CLANG".
Joaloka
#define MDBX_BUILD_COMPILER "lcc:1.23.20:Sep--4-2019:e2k-v3-linux Please use GCC or CLANG compatible compiler"
Ho bua ’nete, ha kea ka ka tseba hang-hang “motsoalle” oa ka oa khale. Ho feta moo, morero ona o se o ntse o lekoa ka makhetlo a mangata ho Elbrus le tlas'a liphallelo tse ngata tse fapaneng, ho akarelletsa le Alt. Ka baqapi ba fapaneng, liphetolelo tsa GNU Make le bash. Ka hona, ke ne ke sa batle ho bona phoso ea ka mona.
Ha u leka ho hlahisa bothata le / kapa ho utloisisa se neng se etsahala, lintho tse ling tse makatsang li ile tsa qala ho etsahala.
Molaetsa oa taelo:
echo "#define MDBX_BUILD_COMPILER '$(set -o pipefail; LC_ALL=C cc --version | head -1 || echo "Please use GCC or CLANG compatible compiler")'"
Nako le nako e ne e hlahisa mongolo o eketsehileng, ebe eseng... Hangata e 'ngoe ea likhetho e ne e tla tšoarella nako e telele, empa ha u ka sheba nako e telele, u lula u e fumana ka bobeli!
Ho hlakile hore, strace
Ka tsela, joalo ka boitlhompho leha e le bofe strace
e ratang ho se ikatise.
Joale ho etsahalang?
- Tšebeliso
head
e na le tokelo (kapa ho e-na le hoo, e bile e qobelloa) ho koala kanale e baloang hang ha e bala palo e batloang ea mela. - Sengoli sa lenaneo le hlahisang data (tabeng ena
cc
) ka hatisa mela e mengata le mahala etsa sena ka mehala e mengatawrite()
. - haeba 'mali o tla ba le nako ea ho koala mocha ka lehlakoreng la hae pele ho bofelo ba ho rekota ka lehlakoreng la mongoli, joale mongoli o tla fumana phoso.
- Lenaneo la mongoli tokelo ea ho ka bobeli ba iphapanyetsa phoso ea ho ngola mocha 'me ba e bonts'a khoutong ea hau ea ho qetela.
- Ka lebaka la ho kenya
set -o pipefail
khoutu ea ho phethela lipeipi e tla ba e seng zero (phoso) haeba sephetho e se zero bonyane ho karolo e le 'ngoe, ebe e tla sebetsa.|| echo "Please use GCC or CLANG compatible compiler"
.
Ho ka 'na ha e-ba le phapang ho itšetlehile ka hore na lenaneo la mongoli le sebetsa joang ka lipontšo. Mohlala, lenaneo le ka emisa ka mokhoa o sa tloaelehang (ka ho iketsetsa boemo ba ho se be le zero/phoso), kapa write()
e tla khutlisa sephetho sa ho ngola li-byte tse seng kae ho feta kamoo u kōpileng le ho beha errno = EPIPE
.
Ke mang ea lokelang ho beha molato?
Tabeng e hlalositsoeng hanyane ho tsohle. Phoso ea ho sebetsa cc
(lcc:1.23.20:Sep—4-2019:e2k-v3-linux) ha e joalo sa hlokahaleng. Maemong a mangata ho molemo ho etsa phoso ka lehlakoreng la tlhokomeliso, le hoja sena se pepesa liphoso tsa tšohanyetso ka har'a boilerplate e etselitsoeng boitšoaro ba setso.
Ke lokela ho etsa eng?
E fosahetse:
fortune | head -1 && echo "Повезло, но вы рискуете!" || echo "WTF?"
E nepahetse:
-
(fortune && echo "Успешно" || echo "Ошибка") | head -1
Mona, ho koala phala pele ho nako ho tla sebetsoa ke toloko ea taelo ha ho sebetsoa phaephe e behiloeng ("ka har'a" masakaneng). Ka hona, haeba
fortune
e tla tlaleha phoso ka ho ngolla mocha o koetsoeng boemong, ebe tlhahiso|| echo "Ошибка"
e ke ke ea fihla kae kapa kae, kaha mocha o se o koetsoe. -
fortune | cat - | head -1 && echo "Успешно" || echo "Ошибка"
Mona ke lisebelisoa
cat
e sebetsa joalo ka damper hobane e iphapanyetsa phosoEPIPE
ha o hula. Sena se lekane hona joale sephethongfortune
e nyane (mela e 'maloa) mme e lumellana le buffer ea kanale (ho tloha ho li-byte tse 512 ho isa ho ≈64K, ho boholo ba OS ≥4K). Ho seng joalo bothata bo ka khutla.
Mokhoa oa ho sebetsa ka nepo EPIPE
le liphoso tse ling tsa ho rekota?
Ha ho na tharollo e le 'ngoe e nepahetseng, empa ho na le litlhahiso tse bonolo:
EPIPE
e hlokehang e tlameha ho sebetsoa ('me e bonts'a boemo ba ho tsoa) ha o ntša data e hlokang botšepehi. Ka mohlala, nakong ea ts'ebetso ea li-archivers kapa li-backup utilities.EPIPE
molemo ho iphapanyetsa ha o hlahisa tlhahisoleseding le melaetsa e thusang. Mohlala, ha o hlahisa tlhahisoleseling mabapi le likhetho--help
kapa--version
.- Haeba khoutu e ntseng e ntlafatsoa e ka sebelisoa ka phaephe pele
| head
, joaleEPIPE
Ho molemo ho hlokomoloha, ho seng joalo ho molemo ho sebetsa le ho bonahatsa boemo ba ho tsoa.
Ke rata ho nka monyetla ona ho hlahisa liteboho tsa ka ho lihlopha
Tsoela pele Camarades, holimo
Спасибо
KDPV ho tloha
Source: www.habr.com