เชฎเช—เชฐเชฎเชพเช‚เชฅเซ€ เชตเชงเซ เชเช• เชนเชพเช‡เชเชจเชฌเช— เชชเชธเชพเชฐ เชฅเชฏเซ‹

เชฎเช—เชฐเชฎเชพเช‚เชฅเซ€ เชตเชงเซ เชเช• เชนเชพเช‡เชเชจเชฌเช— เชชเชธเชพเชฐ เชฅเชฏเซ‹

$> set -o pipefail

$> fortune | head -1 > /dev/null && echo "ะŸะพะฒะตะทะปะพ!" || echo "ะ’ั‹ ะฟั€ะพะธะณั€ะฐะปะธ"
ะŸะพะฒะตะทะปะพ!

$> fortune | head -1 > /dev/null && echo "ะŸะพะฒะตะทะปะพ!" || echo "ะ’ั‹ ะฟั€ะพะธะณั€ะฐะปะธ"
ะ’ั‹ ะฟั€ะพะธะณั€ะฐะปะธ

เชคเซ‡ fortune เชตเชฟเชจเชพ เชถเชฐเชคเซ€ เช•เชพเชฐเซเชฏเช•เซเชฐเชฎ exit(rand()).

เชถเซเช‚ เชคเชฎเซ‡ เชธเชฎเชœเชพเชตเชถเซ‹? เช…เชนเซ€เช‚ เชถเซเช‚ เช–เซ‹เชŸเซเช‚ เช›เซ‡?

เช—เซ€เชคเชพเชคเซเชฎเช•-เชเชคเชฟเชนเชพเชธเชฟเช• เชตเชฟเชทเชฏเชพเช‚เชคเชฐ

เชนเซเช‚ เช† เชนเซ‡เชˆเชเชจเชฌเช— เชธเชพเชฅเซ‡ เชชเซเชฐเชฅเชฎเชตเชพเชฐ เชเช• เช•เซเชตเชพเชฐเซเชŸเชฐ เชชเชนเซ‡เชฒเชพ เชชเชฐเชฟเชšเชฟเชค เชฅเชฏเซ‹ เชนเชคเซ‹. เชชเช›เซ€ FaxNET เชฎเชพเช‚ เช—เซ‡เชŸเชตเซ‡ เชฎเชพเชŸเซ‡ เชคเซ‡ เชฎเชพเชฐเชซเชคเซ‡ เช…เชจเซ‡เช• เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเช“ เชฌเชจเชพเชตเชตเซ€ เชœเชฐเซ‚เชฐเซ€ เชนเชคเซ€ เชชเชพเชˆเชชเซ‹ เชซเซเชฐเซ€เชฌเซ€เชเชธเชกเซ€ เชนเซ‡เช เชณ "เชšเซ‡เช•เชฐเซเชธ เชตเช—เชพเชกเชตเซเช‚". เช…เชชเซ‡เช•เซเชทเชพ เชฎเซเชœเชฌ, เชนเซเช‚ เชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เชเช• เช…เชฆเซเชฏเชคเชจ เช…เชจเซ‡ เชเช•เชฆเชฎ เช…เชจเซเชญเชตเซ€ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐ เชฎเชพเชจเชคเซ‹ เชนเชคเซ‹. เชคเซ‡เชฅเซ€, เชนเซเช‚ เชถเช•เซเชฏ เชคเซ‡เชŸเชฒเซ€ เช•เชพเชณเชœเซ€เชชเซ‚เชฐเซเชตเช• เช…เชจเซ‡ เช•เชพเชณเชœเซ€เชชเซ‚เชฐเซเชตเช• เชฌเชงเซเช‚ เช•เชฐเชตเชพเชจเซ‹ เช‡เชฐเชพเชฆเซ‹ เชฐเชพเช–เชคเซ‹ เชนเชคเซ‹, เชญเซ‚เชฒเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชชเชฐ เชตเชฟเชถเซ‡เชท เชงเซเชฏเชพเชจ เช†เชชเซ€เชจเซ‡...

เชธเซ‡เชจเซเชกเชฎเซ‡เช‡เชฒ เช…เชจเซ‡ uucp/uupc เชฎเชพเช‚ เชฌเช—เซเชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเชพ เชฎเชพเชฐเชพ เช…เช—เชพเช‰เชจเชพ เช…เชจเซเชญเชตเซ‡ "เชธเช‚เชชเซ‚เชฐเซเชฃ เชญเซ‚เชฒ เชนเซ‡เชจเซเชกเชฒเชฟเช‚เช—" เชฎเชพเช‚ เชฎเชพเชฐเชพ เช–เช‚เชคเชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เช•เชฐเซเชฏเซ‹. เชคเซ‡ เชตเชพเชฐเซเชคเชพเชจเซ€ เชตเชฟเช—เชคเซ‹เชฎเชพเช‚ เชกเซ‚เชฌเช•เซ€ เชฎเชพเชฐเชตเชพเชจเซ‹ เช•เซ‹เชˆ เช…เชฐเซเชฅ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชฎเซ‡เช‚ 10-14 เช•เชฒเชพเช• เชฎเชพเชŸเซ‡ เชฌเซ‡ เช…เช เชตเชพเชกเชฟเชฏเชพ เชธเซเชงเซ€ เช† เชนเซ‡เชˆเชเชจเชฌเช— เชธเชพเชฅเซ‡ เชธเช‚เช˜เชฐเซเชท เช•เชฐเซเชฏเซ‹. เชคเซ‡เชฅเซ€, เชคเซ‡ เชฏเชพเชฆ เช†เชตเซเชฏเซเช‚, เช…เชจเซ‡ เช—เชˆเช•เชพเชฒเซ‡ เช† เชœเซ‚เชจเซ€ เช“เชณเช–เชพเชฃ เชซเชฐเซ€เชฅเซ€ เชฎเซเชฒเชพเช•เชพเชค เชฒเซ‡เชตเชพ เชฎเชพเชŸเซ‡ เชฌเช‚เชง เชฅเชˆ เช—เชˆ.

TL; DR เชœเชตเชพเชฌ

เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ head เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชฅเซ€ เชšเซ‡เชจเชฒ เชฌเช‚เชง เช•เชฐเซ‹ fortune เชคเชฐเชค เชœ เชœเชฒเชฆเซ€ เชคเซ‡ เชชเซเชฐเชฅเชฎ เชชเช‚เช•เซเชคเชฟ เชตเชพเช‚เชšเซ‡ เช›เซ‡. เชœเซ‹ fortune เชเช• เช•เชฐเชคเชพเช‚ เชตเชงเซ เชฒเชพเช‡เชจ เช†เช‰เชŸเชชเซเชŸ เช•เชฐเซ‡ เช›เซ‡, เชชเช›เซ€ เช…เชจเซเชฐเซ‚เชช เช•เซ‰เชฒ write() เชญเซ‚เชฒ เชชเชฐเชค เช•เชฐเชถเซ‡ เช…เชฅเชตเชพ เชœเชพเชฃ เช•เชฐเชถเซ‡ เช•เซ‡ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเชคเชพเช‚ เช“เช›เชพ เชฌเชพเช‡เชŸเซเชธ เช†เช‰เชŸเชชเซเชŸ เช›เซ‡. เชฌเชฆเชฒเชพเชฎเชพเช‚, เชธเชพเชตเชšเซ‡เชคเซ€เชชเซ‚เชฐเซเชตเช•เชจเซ€ เชญเซ‚เชฒ เชนเซ‡เชจเซเชกเชฒเชฟเช‚เช— เชธเชพเชฅเซ‡ เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ fortune เช† เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซ‡ เชคเซ‡เชจเซ€ เชฌเชนเชพเชฐ เชจเซ€เช•เชณเชตเชพเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชชเซเชฐเชคเชฟเชฌเชฟเช‚เชฌเชฟเชค เช•เชฐเชตเชพเชจเซ‹ เช…เชงเชฟเช•เชพเชฐ เช›เซ‡. เชชเช›เซ€ เชธเซเชฅเชพเชชเชจ เช•เชพเชฐเชฃเซ‡ set -o pipefail เช† เช•เชพเชฎ เช•เชฐเชถเซ‡ || echo "ะ’ั‹ ะฟั€ะพะธะณั€ะฐะปะธ".

เชœเซ‹ เช•เซ‡, head เชคเซ‡ เชธเชฎเชฏเชธเชฐ เชจ เช•เชฐเซ€ เชถเช•เซ‡ เชชเชนเซ‡เชฒเชพ เชฌเช‚เชง เช•เชฐเซ‹ fortune เชกเซ‡เชŸเชพ เช†เช‰เชŸเชชเซเชŸ เช•เชฐเชตเชพเชจเซเช‚ เชธเชฎเชพเชชเซเชค เช•เชฐเชถเซ‡. เชชเช›เซ€ เชคเซ‡ เช•เชพเชฎ เช•เชฐเชถเซ‡ && echo "ะŸะพะฒะตะทะปะพ!".

เชฎเชพเชฐเชพ เช†เชœเชจเชพ เชเช•เชฎเชพเช‚ GNUMakefile เช†เชตเซ€ เช›เซ‡ เชŸเซเช•เชกเซ‹:

echo '#define MDBX_BUILD_COMPILER "$(shell set -o pipefail; $(CC) --version | head -1 || echo 'Please use GCC or CLANG compatible compiler')"'

เชฎเชพเชจเชตเชฎเชพเช‚ เช…เชจเซเชตเชพเชฆเชฟเชค

เชคเซ‡ เช…เชนเซ€เช‚ เชธเชพเชฎเชพเชจเซเชฏ เช›เซ‡ เชœเซ€.เชเชจ.เชฏเซ. เชฎเซ‡เช• ะธ เชฌเชพเชถ เชตเชฟเช•เชฒเซเชชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชฎเซเชชเชพเชˆเชฒเชฐ เชฐเซ€เชคเซ‡ --version เชคเซ‡ เชชเซ‚เช›เซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡ เช•เซ‹เชฃ เช›เซ‡, เช…เชจเซ‡ เชœเซ‹ เชตเชฟเช•เชฒเซเชช เชธเชฎเชฐเซเชฅเชฟเชค เชจเชฅเซ€, เชคเซ‹ เชธเซเชŸเชฌ เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ "เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ GCC เช…เชฅเชตเชพ CLANG เชธเซเชธเช‚เช—เชค เช•เชฎเซเชชเชพเช‡เชฒเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹".

เช—เชฎเซ‡ เช›เซ‡ เชฌเซ‹เช‡เชฒเชฐเชชเซเชฒเซ‡เชŸ เช—เชฎเซ‡ เชคเซเชฏเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡. เชคเซ‡ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชชเชนเซ‡เชฒเชพ เช† เชœเช—เซเชฏเชพเช เชฆเซ‡เช–เชพเชฏเซ‹ เชนเชคเซ‹ เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชœเช—เซเชฏเชพเช เชธเช‚เชชเซ‚เชฐเซเชฃ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚ เชนเชคเซเช‚ (เชฒเชฟเชจเช•เซเชธ, เชธเซ‹เชฒเชพเชฐเชฟเชธ, เช“เชเชธเชเช•เซเชธ, เชซเซเชฐเซ€เชฌเซ€เชเชธเชกเซ€, เชกเชฌเชฒเซเชฏเซเชเชธเชเชฒ เชตเช—เซ‡เชฐเซ‡). เชชเชฐเช‚เชคเซ เช—เชˆเช•เชพเชฒเซ‡ เชฎเชพเช‚ altlinux เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เชเชฒเซเชฌเซเชฐเชธ 2000 (E2K) เชฎเซ‡เช‚ เชจเซ‹เช‚เชงเซเชฏเซเช‚:

#define MDBX_BUILD_COMPILER "lcc:1.23.20:Sep--4-2019:e2k-v3-linux Please use GCC or CLANG compatible compiler"

เชธเชพเชšเซเช‚ เช•เชนเซเช‚ เชคเซ‹, เชนเซเช‚ เชฎเชพเชฐเชพ เชœเซ‚เชจเชพ "เช“เชณเช–เชพเชฃ"เชจเซ‡ เชคเชฐเชค เชœ เช“เชณเช–เซ€ เชถเช•เซเชฏเซ‹ เชจเชนเซ€เช‚. เชคเชฆเซเชชเชฐเชพเช‚เชค, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชเชฒเชฌเซเชฐเชธ เชชเชฐ เช…เชจเซ‡ Alt เชธเชนเชฟเชค เช˜เชฃเชพเช‚ เชตเชฟเชตเชฟเชง เชตเชฟเชคเชฐเชฃเซ‹ เชนเซ‡เช เชณ เช˜เชฃเซ€ เชตเช–เชค เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡. เชตเชฟเชตเชฟเชง เช•เชฎเซเชชเชพเช‡เชฒเชฐเซเชธ เชธเชพเชฅเซ‡, GNU เชฎเซ‡เช• เช…เชจเซ‡ เชฌเซ‡เชถเชจเชพ เชตเชฐเซเชเชจ. เชคเซ‡เชฅเซ€, เชนเซเช‚ เช…เชนเซ€เช‚ เชฎเชพเชฐเซ€ เชญเซ‚เชฒ เชœเซ‹เชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชจ เชนเชคเซ‹.

เชœเซเชฏเชพเชฐเซ‡ เชธเชฎเชธเซเชฏเชพเชจเซเช‚ เชชเซเชจเชƒเช‰เชคเซเชชเชพเชฆเชจ เช•เชฐเชตเชพเชจเซ‹ เช…เชจเซ‡/เช…เชฅเชตเชพ เชถเซเช‚ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡ เชธเชฎเชœเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชตเชงเซ เชตเชฟเชšเชฟเชคเซเชฐ เชตเชธเซเชคเซเช“ เชฅเชตเชพ เชฒเชพเช—เซ€.
เช†เชฆเซ‡เชถ เชตเชพเช•เซเชฏ เชœเซ‹เชกเชฃเซ€:

echo "#define MDBX_BUILD_COMPILER '$(set -o pipefail; LC_ALL=C cc --version | head -1 || echo "Please use GCC or CLANG compatible compiler")'"

เชฆเชฐเซ‡เช• เชธเชฎเชฏเซ‡ เช…เชจเซ‡ เชชเช›เซ€ เชคเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เชŸเซ‡เช•เซเชธเซเชŸ เช‰เชคเซเชชเชจเซเชจ เช•เชฐเชถเซ‡, เชชเช›เซ€ เชจเชนเซ€เช‚... เช˜เชฃเซ€เชตเชพเชฐ เชตเชฟเช•เชฒเซเชชเซ‹เชฎเชพเช‚เชฅเซ€ เชเช• เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชธเซเชงเซ€ เชตเชณเช—เซ€ เชฐเชนเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชธเซเชงเซ€ เชชเซ‹เช• เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเชจเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เชฌเช‚เชจเซ‡ เชฎเชณเซ‡ เช›เซ‡!

เช…เชฒเชฌเชคเซเชค, strace เช†เชชเชฃเซเช‚ เชฌเชงเซเช‚! เช…เชจเซ‡ เชธเซเชŸเซเชฐเซ‡เชธ เชŸเชพเชฏเชฐเซ‡เชก เชŸเชพเชˆเชช เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชชเชฐเช‚เชคเซ เชเชจเซเชŸเชฐ เชฆเชฌเชพเชตเชตเชพเชจเซ‹ เชธเชฎเชฏ เชจ เชนเซ‹เชตเชพเชฅเซ€, เชฎเซ‡เช‚ เชฎเชพเชฐเชพ เชœเซ‚เชจเชพ เชฎเชฟเชคเซเชฐ เชถเซเชฐเซ€ เชนเซ‡เชˆเชเชจเชฌเช— เช…เชจเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ เช“เชณเช–เซเชฏเชพ. เช•เชฎเซเชชเชพเช‡เชฒเชฐ เชนเซเช‚ 25 เชตเชฐเซเชท เชชเชนเซ‡เชฒเชพ, เชจเซ‹เชธเซเชŸเชพเชฒเซเชœเซ€โ€ฆ เช…เชจเซ‡ เชฎเซ‡เช‚ เชฆเซเชƒเช–เซ€ เชฅเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช…เชจเซ‡ เช† เชจเซ‹เช‚เชง เชฒเช–เซ€ ๐Ÿ˜‰

เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, เช•เซ‹เชˆเชชเชฃ เชธเซเชตเชพเชญเชฟเชฎเชพเชจเซ€ เชœเซ‡เชฎ เชนเชพเช‡เชเชจเชฌเช—, เชนเซ‡เช เชณ strace เชชเซเชฐเชœเชจเชจ เชจ เช•เชฐเชตเชพเชจเซเช‚ เชชเชธเช‚เชฆ เช•เชฐเซ‡ เช›เซ‡.

เชคเซ‹ เชถเซเช‚ เชฅเชˆ เชฐเชนเซเชฏเซเช‚ เช›เซ‡?

  • เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ head เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‡เชฒ เชธเช‚เช–เซเชฏเชพ เชตเชพเช‚เชšเชคเชพเชจเซ€ เชธเชพเชฅเซ‡ เชœ เชตเช‚เชšเชพเชคเซ€ เชšเซ‡เชจเชฒเชจเซ‡ เชฌเช‚เชง เช•เชฐเชตเชพเชจเซ‹ เช…เชงเชฟเช•เชพเชฐ (เช…เชฅเชตเชพ เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡, เชซเชฐเชœ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡) เช›เซ‡.
  • เชกเซ‡เชŸเชพ-เชœเชจเชฐเซ‡เชŸเชฟเช‚เช— เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ-เชฐเชพเช‡เชŸเชฐ (เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ cc) เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชฌเชนเซเชตเชฟเชง เชฐเซ‡เช–เชพเช“ เช›เชพเชชเซ‹ เช…เชจเซ‡ เชฎเชซเชค เชฌเชนเซเชตเชฟเชง เช•เซ‰เชฒเซเชธ เชฆเซเชตเชพเชฐเชพ เช† เช•เชฐเซ‹ write().
  • เชœเซ‹ เชฒเซ‡เช–เช•เชจเซ€ เชฌเชพเชœเซ เชชเชฐ เชฐเซ‡เช•เซ‹เชฐเซเชกเชฟเช‚เช— เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚ เชตเชพเชšเช• เชชเชพเชธเซ‡ เชคเซ‡เชจเซ€ เชฌเชพเชœเซเชจเซ€ เชšเซ‡เชจเชฒ เชฌเช‚เชง เช•เชฐเชตเชพเชจเซ‹ เชธเชฎเชฏ เชนเชถเซ‡, เชชเช›เซ€ เชฒเซ‡เช–เช•เชจเซ‡ เชญเซ‚เชฒ เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ‡.
  • เชฒเซ‡เช–เช• เช•เชพเชฐเซเชฏเช•เซเชฐเชฎ เชจเซ€ เชฎเชพเชŸเซ‡เชจเชพ เชนเช•เชฆเชพเชฐ เชฌเช‚เชจเซ‡ เชšเซ‡เชจเชฒ เชฒเช–เชตเชพเชจเซ€ เชญเซ‚เชฒเชจเซ‡ เช…เชตเช—เชฃเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชคเชฎเชพเชฐเชพ เชชเซ‚เชฐเซเชฃเชคเชพ เช•เซ‹เชกเชฎเชพเช‚ เชชเซเชฐเชคเชฟเชฌเชฟเช‚เชฌเชฟเชค เช•เชฐเซ‡ เช›เซ‡.
  • เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจเชจเซ‡ เช•เชพเชฐเชฃเซ‡ set -o pipefail เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชชเซ‚เชฐเซเชฃเชคเชพ เช•เซ‹เชก เชฌเชฟเชจ-เชถเซ‚เชจเซเชฏ (เชญเซ‚เชฒเชญเชฐเซเชฏเซ‹) เชนเชถเซ‡ เชœเซ‹ เชชเชฐเชฟเชฃเชพเชฎ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชเช• เชคเชคเซเชตเชฎเชพเช‚เชฅเซ€ เชฌเชฟเชจ-เชถเซ‚เชจเซเชฏ เชนเชถเซ‡, เช…เชจเซ‡ เชชเช›เซ€ เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเชถเซ‡ || echo "Please use GCC or CLANG compatible compiler".

เชฒเซ‡เช–เช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชธเชฟเช—เซเชจเชฒเซ‹ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เชตเชฟเชตเชฟเชงเชคเชพ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช…เชธเชพเชงเชพเชฐเชฃ เชฐเซ€เชคเซ‡ เชธเชฎเชพเชชเซเชค เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ (เชจเซ‹เชจ-เชถเซ‚เชจเซเชฏ/เชญเซ‚เชฒ เชธเชฎเชพเชชเซเชคเชฟ เชธเซเชฅเชฟเชคเชฟเชจเซ€ เชธเซเชตเชšเชพเชฒเชฟเชค เชชเซ‡เชขเซ€ เชธเชพเชฅเซ‡), เช…เชฅเชตเชพ write() เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‡เชฒ เช…เชจเซ‡ เชธเซ‡เชŸ เช•เชฐเชคเชพ เช“เช›เชพ เชฌเชพเช‡เชŸเซเชธ เชฒเช–เชตเชพเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เชชเชฐเชค เช•เชฐเชถเซ‡ errno = EPIPE.

เชฆเซ‹เชทเซ€ เช•เซ‹เชฃ?

เชตเชฐเซเชฃเชตเซ‡เชฒ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชฌเชงเซเช‚ เชฅเซ‹เชกเซเช‚ เชฅเซ‹เชกเซเช‚. เชฎเชพเช‚ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เชญเซ‚เชฒ cc (lcc:1.23.20:Sepโ€”4-2019:e2k-v3-linux) เชจเชฅเซ€ เชจเชฟเชฐเชฐเซเชฅเช• เช˜เชฃเชพ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚ เชธเชพเชตเชงเชพเชจเซ€ เชธเชพเชฅเซ‡ เชญเซ‚เชฒ เช•เชฐเชตเซ€ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡, เชœเซ‹ เช•เซ‡ เช† เชชเชฐเช‚เชชเชฐเชพเช—เชค เชตเชฐเซเชคเชจ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เชฌเซ‹เชˆเชฒเชฐเชชเซเชฒเซ‡เชŸเชฎเชพเช‚ เช…เชšเชพเชจเช• เช–เชพเชฎเซ€เช“ เช‰เชœเชพเช—เชฐ เช•เชฐเซ‡ เช›เซ‡.

เชฎเชพเชฐเซ‡ เชถเซเช‚ เช•เชฐเชตเซเช‚ เชœเซ‹เชˆเช?

เช–เซ‹เชŸเซเช‚:

fortune | head -1 && echo "ะŸะพะฒะตะทะปะพ, ะฝะพ ะฒั‹ ั€ะธัะบัƒะตั‚ะต!" || echo "WTF?"

เชธเชพเชšเซเช‚

  1. (fortune && echo "ะฃัะฟะตัˆะฝะพ" || echo "ะžัˆะธะฑะบะฐ") | head -1

    เช…เชนเซ€เช‚, เชจเซ‡เชธเซเชŸเซ‡เชก เชชเชพเช‡เชชเชฒเชพเช‡เชจ ("เช•เซŒเช‚เชธเชจเซ€ เช…เช‚เชฆเชฐ") เชธเซ‡เชตเชพ เช†เชชเชคเซ€ เชตเช–เชคเซ‡ เช•เชฎเชพเชจเซเชก เชˆเชจเซเชŸเชฐเชชเซเชฐเซ€เชŸเชฐ เชฆเซเชตเชพเชฐเชพ เชชเชพเชˆเชชเชจเซ‡ เชตเชนเซ‡เชฒเซเช‚ เชฌเช‚เชง เช•เชฐเชตเชพเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชคเชฆเชจเซเชธเชพเชฐ, เชœเซ‹ fortune เชธเซเชฅเชฟเชคเชฟ, เชชเช›เซ€ เช†เช‰เชŸเชชเซเชŸเชฎเชพเช‚ เชฌเช‚เชง เชšเซ‡เชจเชฒเชจเซ‡ เชฒเซ‡เช–เชฟเชคเชฎเชพเช‚ เชญเซ‚เชฒเชจเซ€ เชœเชพเชฃ เช•เชฐเชถเซ‡ || echo "ะžัˆะธะฑะบะฐ" เชคเซ‡ เช•เซเชฏเชพเช‚เชฏ เชฎเชณเชถเซ‡ เชจเชนเซ€เช‚, เช•เชพเชฐเชฃ เช•เซ‡ เชšเซ‡เชจเชฒ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชฌเช‚เชง เช›เซ‡.

  2. fortune | cat - | head -1 && echo "ะฃัะฟะตัˆะฝะพ" || echo "ะžัˆะธะฑะบะฐ"

    เช…เชนเซ€เช‚ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เช›เซ‡ cat เชกเซ‡เชฎเซเชชเชฐ เชคเชฐเซ€เช•เซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชญเซ‚เชฒเชจเซ‡ เช…เชตเช—เชฃเซ‡ เช›เซ‡ EPIPE เช‰เชชเชพเชก เชชเชฐ. เชนเชพเชฒเชจเชพ เชจเชฟเชทเซเช•เชฐเซเชท เชฎเชพเชŸเซ‡ เช† เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡ fortune เชจเชพเชจเซ€ (เช•เซ‡เชŸเชฒเซ€เช• เชฐเซ‡เช–เชพเช“) เช…เชจเซ‡ เชšเซ‡เชจเชฒ เชฌเชซเชฐเชฎเชพเช‚ เชฌเช‚เชงเชฌเซ‡เชธเซ‡ เช›เซ‡ (512 เชฌเชพเช‡เชŸเซเชธเชฅเซ€ โ‰ˆ64K เชธเซเชงเซ€, เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ OS โ‰ฅ4Kเชฎเชพเช‚). เชจเชนเชฟเช‚เชคเชฐ, เชธเชฎเชธเซเชฏเชพ เชชเชพเช›เซ€ เช†เชตเซ€ เชถเช•เซ‡ เช›เซ‡.

เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเซ€ EPIPE เช…เชจเซ‡ เช…เชจเซเชฏ เชฐเซ‡เช•เซ‹เชฐเซเชกเชฟเช‚เช— เชญเซ‚เชฒเซ‹?

เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชเช• เชฏเซ‹เช—เซเชฏ เช‰เช•เซ‡เชฒ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซเชฏเชพเช‚ เชธเชฐเชณ เชญเชฒเชพเชฎเชฃเซ‹ เช›เซ‡:

  • EPIPE เชœเชฐเซ‚เชฐเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเซ€ เชœเซ‹เชˆเช (เช…เชจเซ‡ เชเช•เซเชเชฟเชŸ เชธเซเชŸเซ‡เชŸเชธเชฎเชพเช‚ เชชเซเชฐเชคเชฟเชฌเชฟเช‚เชฌเชฟเชค เชฅเชพเชฏ เช›เซ‡) เชœเซเชฏเชพเชฐเซ‡ เชกเซ‡เชŸเชพ เช†เช‰เชŸเชชเซเชŸ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡เชจเซ‡ เช…เช–เช‚เชกเชฟเชคเชคเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช†เชฐเซเช•เชพเช‡เชตเชฐเซเชธ เช…เชฅเชตเชพ เชฌเซ‡เช•เช…เชช เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเช“เชจเชพ เชธเช‚เชšเชพเชฒเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ.
  • EPIPE เช…เชตเช—เชฃเชตเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡ เชฎเชพเชนเชฟเชคเซ€ เช…เชจเซ‡ เชธเชนเชพเชฏเช• เชธเช‚เชฆเซ‡เชถเชพเช“ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชคเซ€ เชตเช–เชคเซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชตเชฟเช•เชฒเซเชชเซ‹ เชชเชฐ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ --help เช…เชฅเชตเชพ --version.
  • เชœเซ‹ เช•เซ‹เชก เชกเซ‡เชตเชฒเชช เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซเชฏเซ‹ เชนเซ‹เชฏ เชคเซ‹ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚ เชชเชพเช‡เชชเชฒเชพเช‡เชจเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ | headเชชเช›เซ€ EPIPE เช…เชตเช—เชฃเชตเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡, เช…เชจเซเชฏเชฅเชพ เชฌเชนเชพเชฐ เชจเซ€เช•เชณเชตเชพเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเซ€ เช…เชจเซ‡ เชชเซเชฐเชคเชฟเชฌเชฟเช‚เชฌเชฟเชค เช•เชฐเชตเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡.

เชนเซเช‚ เชŸเซ€เชฎเซ‹ เชชเซเชฐเชคเซเชฏเซ‡ เช•เซƒเชคเชœเซเชžเชคเชพ เชตเซเชฏเช•เซเชค เช•เชฐเชตเชพเชจเซ€ เช† เชคเช• เชฒเซ‡เชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ MCST ะธ altlinux เชฎเชนเชพเชจ เช‰เชคเซเชชเชพเชฆเช• เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡. เชคเชฎเชพเชฐเซ‹ เชจเชฟเชถเซเชšเชฏ เช…เชฆเซเชญเซเชค เช›เซ‡!
เชคเซ‡เชจเซ‡ เชšเชพเชฒเซ เชฐเชพเช–เซ‹ เช•เซ‡เชฎเซ‡เชฐเซ‡เชกเซเชธ, เช…เชช เชชเชพเชจเช–เชฐเชฎเชพเช‚ เชฎเซ€เชŸเชฟเช‚เช—เซเชธ!

ะกะฟะฐัะธะฑะพ เชฌเซ‡เชฐเซ‡เช เชŸเชพเชˆเชชเซ‹ เช…เชจเซ‡ เชญเซ‚เชฒเซ‹ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡.
เชฅเซ€ KDPV เชœเซเชฏเซ‹เชฐเซเชœเซ€ เช.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹