เจฎเจ—เจฐเจฎเฉฑเจ› เจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจนเจพเจˆเจœเจผเจจเจฌเฉฑเจ—

เจฎเจ—เจฐเจฎเฉฑเจ› เจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจนเจพเจˆเจœเจผเจจเจฌเฉฑเจ—

$> set -o pipefail

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

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

เจ‡เจน เจ‡เจธ เจฒเจˆ เจนเฉˆ fortune เจฌเจฟเจจเจพเจ‚ เจธเจผเจฐเจค เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ exit(rand()).

เจ•เฉ€ เจคเฉเจธเฉ€เจ‚ เจธเจฎเจเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹? เจ‡เฉฑเจฅเฉ‡ เจ•เฉ€ เจ—เจฒเจค เจนเฉˆ?

เจ—เฉ€เจคเจ•เจพเจฐเฉ€-เจ‡เจคเจฟเจนเจพเจธเจ• เจตเจฟเจ•เจพเจฐ

เจฎเฉˆเจ‚ เจชเจนเจฟเจฒเฉ€ เจตเจพเจฐ เจ‡เจธ เจนเฉ‡เจœเจผเจจเจฌเฉฑเจ— เจจเจพเจฒ เจ‡เฉฑเจ• เจšเฉŒเจฅเจพเจˆ เจธเจฆเฉ€ เจชเจนเจฟเจฒเจพเจ‚ เจœเจพเจฃเฉ‚ เจนเฉ‹เจ‡เจ† เจธเฉ€เฅค เจซเจฟเจฐ FaxNET เจตเจฟเฉฑเจš เจ—เฉ‡เจŸเจตเฉ‡ เจฒเจˆ เจ•เจˆ เจ‰เจชเจฏเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจธเฉ€ เจชเจพเจˆเจช FreeBSD เจฆเฉ‡ เจ…เจงเฉ€เจจ "เจšเฉˆเจ•เจฐ เจ–เฉ‡เจกเจฃเจพ"เฅค เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‰เจฎเฉ€เจฆ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€, เจฎเฉˆเจ‚ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ‰เฉฑเจจเจค เจ…เจคเฉ‡ เจ•เจพเจซเจผเฉ€ เจคเจœเจฐเจฌเฉ‡เจ•เจพเจฐ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฐ เจฎเฉฐเจจเจฟเจ†. เจ‡เจธ เจฒเจˆ, เจฎเฉˆเจ‚ เจนเจฐ เจšเฉ€เจœเจผ เจจเฉ‚เฉฐ เจœเจฟเฉฐเจจเจพ เจธเฉฐเจญเจต เจนเฉ‹ เจธเจ•เฉ‡ เจงเจฟเจ†เจจ เจจเจพเจฒ เจ…เจคเฉ‡ เจงเจฟเจ†เจจ เจจเจพเจฒ เจ•เจฐเจจ เจฆเจพ เจ‡เจฐเจพเจฆเจพ เจฐเฉฑเจ–เจฆเจพ เจนเจพเจ‚, เจ—เจฒเจคเฉ€ เจจเจพเจฒ เจจเจœเจฟเฉฑเจ เจฃ 'เจคเฉ‡ เจตเจฟเจธเจผเฉ‡เจธเจผ เจงเจฟเจ†เจจ เจฆเจฟเฉฐเจฆเฉ‡ เจนเฉ‹เจ...

ะฃัะตั€ะดะธั ะฒ ยซั‚ั‰ะฐั‚ะตะปัŒะฝะพะน ะพะฑั€ะฐะฑะพั‚ะบะต ะพัˆะธะฑะพะบยป ะผะฝะต ั‚ะพะณะดะฐ ะดะพะฑะฐะฒะธะป ะฟั€ะตะดั‹ะดัƒั‰ะธะน ะพะฟั‹ั‚ ะฑะพั€ัŒะฑั‹ ั ะฑะฐะณะฐะผะธ ะฒ sendmail ะธ 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')"'

เจฎเจจเฉเฉฑเจ– เจตเจฟเฉฑเจš เจ…เจจเฉเจตเจพเจฆ เจ•เฉ€เจคเจพ เจ—เจฟเจ†

เจฒเจˆ เจ‡เฉฑเจฅเฉ‡ เจ†เจฎ เจนเฉˆ เจœเฉ€ เจเจจ เจฏเฉ‚ เจฎเฉ‡เจ• ะธ bash เจตเจฟเจ•เจฒเจช เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ --version เจ‡เจน เจชเฉเฉฑเจ›เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‰เจน เจ•เฉŒเจฃ เจนเฉˆ, เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจตเจฟเจ•เจฒเจช เจธเจฎเจฐเจฅเจฟเจค เจจเจนเฉ€เจ‚ เจนเฉˆ, เจคเจพเจ‚ เจ‡เฉฑเจ• เจธเจŸเฉฑเจฌ เจชเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ "เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ GCC เจœเจพเจ‚ CLANG เจ…เจจเฉเจ•เฉ‚เจฒ เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹".

เจชเจธเฉฐเจฆ เจนเฉˆ เจฌเจพเจ‡เจฒเจฐเจชเจฒเฉ‡เจŸ เจ•เจฟเจคเฉ‡ เจตเฉ€ เจฒเฉฑเจญเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจ‡เจธ เจธเจฅเจพเจจ 'เจคเฉ‡ เจฌเจนเฉเจค เจธเจฎเจพเจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจชเฉเจฐเจ—เจŸ เจนเฉ‹เจ‡เจ† เจธเฉ€ เจ…เจคเฉ‡ เจนเจฐ เจœเจ—เฉเจนเจพ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจธเฉ€ (เจฒเฉ€เจจเจ•เจธ, เจธเฉ‹เจฒเจพเจฐเจฟเจธ, OSX, FreeBSD, WSL เจ†เจฆเจฟ)เฅค เจชเจฐ เจ•เฉฑเจฒเฉเจน เจตเจฟเฉฑเจš 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹