$> set -o pipefail
$> fortune | head -1 > /dev/null && echo "Повезло!" || echo "Вы проиграли"
Повезло!
$> fortune | head -1 > /dev/null && echo "Повезло!" || echo "Вы проиграли"
Вы проиграли
ko te reira fortune
hōtaka herekore exit(rand())
.
Ka taea e koe te whakamarama he aha te he i konei?
Waiata-historical digression
I mohio tuatahi ahau ki tenei Heisenbug i te hauwha o te rau tau ki muri. Na mo te kuaha i roto i te FaxNET me hanga etahi taputapu ma
Ko taku wheako o mua mo te whakahaere i nga pepeke i roto i te sendmail me te uucp/upc i taapiri atu ki taku kaha ki te "whakahaere hapa." Kaore he take mo te ruku ki nga korero o taua korero, engari i tohe ahau ki tenei Heisenbug mo nga wiki e rua mo te 10-14 haora. No reira, i maumaharatia, inanahi nei i tu atu tenei hoa tawhito ki te toro atu ano.
TL;DR Whakautu
Mahinga head
taea kati te hongere mai fortune
сразу ka panui ia i te rarangi tuatahi. Mehemea fortune
ka whakaputa neke atu i te kotahi raina, katahi ka waea atu write()
ka whakahoki mai he hapa, he ripoata ranei he iti ake nga paita ka puta mai i te tono. Ka huri, ka tuhia me te tupato ki te whakahaere hapa fortune
kei a ia te tika ki te whakaata i tenei ahuatanga i roto i tona mana puta. Na na te whakaurunga set -o pipefail
ka mahi || echo "Вы проиграли"
.
Engari, head
e kore pea e tae i te waa kati i mua fortune
ka mutu te whakaputa raraunga. Na ka mahi && echo "Повезло!"
.
I tetahi o aku ra GNUMakefile
echo '#define MDBX_BUILD_COMPILER "$(shell set -o pipefail; $(CC) --version | head -1 || echo 'Please use GCC or CLANG compatible compiler')"'
I whakamaoritia ki te tangata
He mea noa i konei mo --version
ka patai ko wai ia, a, ki te kore e tautokohia te whiringa, katahi ka whakauruhia he papa "Whakamahia koa te GCC or CLANG compiler hototahi".
rite
#define MDBX_BUILD_COMPILER "lcc:1.23.20:Sep--4-2019:e2k-v3-linux Please use GCC or CLANG compatible compiler"
Te parau mau, aita vau i ite oioi i to ’u “matamua” tahito. Ano, he maha nga wa kua whakamatauria te kaupapa i runga i te Elbrus me te maha o nga tohatoha rereke, tae atu ki a Alt. Me nga momo whakahiato, nga putanga o GNU Make me te bash. Na reira, kaore au i pai kia kite i taku he i konei.
I te wa e ngana ana ki te whakaputa i te raru me te mohio ranei ki nga mea kei te haere, ka timata nga mea rereke.
Takitaki raina whakahau:
echo "#define MDBX_BUILD_COMPILER '$(set -o pipefail; LC_ALL=C cc --version | head -1 || echo "Please use GCC or CLANG compatible compiler")'"
Ia wa, katahi ka whakaputa tuhinga taapiri, karekau... I te nuinga o te waa ka mau tonu tetahi o nga whiringa, engari mena ka roa ake koe, ka whiwhi koe i nga mea e rua!
Ko te tikanga, strace
Ma te ara, pera me te whakaute-whaiaro strace
he pai ake kia kaua e whakaputa uri.
Na he aha kei te haere?
- Mahinga
head
kei a ia te tika (he kaha ake ranei) ki te kati i te hongere e panuitia ana ina panuitia te maha o nga rarangi i tonoa. - Ko te kaupapa-whakaputa raraunga-kaituhi (i tenei keehi
cc
) taea tāngia ngā rārangi maha me te kore utu mahia tenei ma nga waea mahawrite()
. - ki te ka whai wa te kaipanui ki te kati i te hongere i tona taha i mua i te mutunga o te rekoata ki te taha o te kaituhi, katahi ka hapa te kaituhi.
- Hōtaka kaituhi kei a nga tangata tika ka warewarehia te hongere tuhi hapa me te whakaata i roto i to waehere whakaotinga.
- Nā te tāutanga
set -o pipefail
ka kore-kore te waehere whakaoti paipa (he pohehe) mena he kore-kore te hua mai i te mea kotahi, katahi ka mahi|| echo "Please use GCC or CLANG compatible compiler"
.
He rereke pea kei te ahua o te mahi a te kaituhi me nga tohu. Hei tauira, ka mutu kino pea te hotaka (me te whakaputa aunoa i te mana kore-kore/whakamutu hapa), ranei write()
ka whakahokia te hua o te tuhi i nga paita iti ake i te tono me te tautuhi errno = EPIPE
.
Ko wai te mea he?
I roto i te keehi kua whakaahuatia iti o nga mea katoa. Hapa te whakahaere i roto cc
(lcc:1.23.20:Sep—4-2019:e2k-v3-linux) ehara nui. I te nuinga o nga wa he pai ake te kotiti i te taha o te whakatupato, ahakoa ka kitea nga hapa ohorere i roto i te pereti kohua i hangaia mo te whanonga tuku iho.
Me aha ahau?
Hape:
fortune | head -1 && echo "Повезло, но вы рискуете!" || echo "WTF?"
Tika:
-
(fortune && echo "Успешно" || echo "Ошибка") | head -1
I konei, ko te katinga moata o te paipa ka whakahaerea e te kaiwhakamaori whakahau i te wa e mahi ana i te paipa kohanga ("kei roto" i nga reu). No reira, mena
fortune
ka ripoata he hapa i roto i te tuhi ki tetahi hongere kati i roto i te mana, katahi ko te putanga|| echo "Ошибка"
e kore e tae ki hea, i te mea kua kati te hongere. -
fortune | cat - | head -1 && echo "Успешно" || echo "Ошибка"
Anei te whaipainga
cat
ka mahi hei whakamarumaru na te mea ka warewarehia te hapaEPIPE
i runga i te tangohanga. He nui tenei mo te whakatau inaianeifortune
iti (he maha nga raina) ka uru ki roto i te parapara hongere (mai i te 512 paita ki te ≈64K, i te nuinga o te OS ≥4K). Ki te kore ka hoki mai ano te raru.
Me pehea te tukatuka tika EPIPE
me etahi atu hapa tuhi?
Karekau he otinga tika kotahi, engari he tohutohu ngawari:
EPIPE
hiahiatia me tukatuka (me te whakaata i te mana puta) i te whakaputanga raraunga e tika ana. Hei tauira, i te wa e mahi ana nga purongo, taputapu taapiri ranei.EPIPE
pai ake te wareware i te wa e whakaatu ana i nga korero me nga karere awhina. Hei tauira, i te wa e whakaatu ana i nga korero mo nga whiringa--help
ranei--version
.- Mena ka whakawhanakehia te waehere ka taea te whakamahi i roto i te paipa i mua
| head
, kaEPIPE
He pai ake te wareware, ki te kore he pai ake te tukatuka me te whakaata i te ahua o te putanga.
E hiahia ana ahau ki te whai waahi ki te whakapuaki i taku mihi ki nga kapa
Kia mau e hoa ma, ki runga
Tuhinga
KDPV mai
Source: will.com