рдордЧрд░рдордЪреНрдЫ рдХреЗ рдкреАрдЫреЗ рдПрдХ рдФрд░ рд╣рд╛рдЗрдЬреЗрдирдмрдЧ

рдордЧрд░рдордЪреНрдЫ рдХреЗ рдкреАрдЫреЗ рдПрдХ рдФрд░ рд╣рд╛рдЗрдЬреЗрдирдмрдЧ

$> set -o pipefail

$> fortune | head -1 > /dev/null && echo "╨Я╨╛╨▓╨╡╨╖╨╗╨╛!" || echo "╨Т╤Л ╨┐╤А╨╛╨╕╨│╤А╨░╨╗╨╕"
╨Я╨╛╨▓╨╡╨╖╨╗╨╛!

$> fortune | head -1 > /dev/null && echo "╨Я╨╛╨▓╨╡╨╖╨╗╨╛!" || echo "╨Т╤Л ╨┐╤А╨╛╨╕╨│╤А╨░╨╗╨╕"
╨Т╤Л ╨┐╤А╨╛╨╕╨│╤А╨░╨╗╨╕

рдпрд╣рд╛рдВ fortune рдмрд┐рдирд╛ рд╕рд╢рд░реНрдд рдХрд╛рд░реНрдпрдХреНрд░рдо exit(rand()).

рдХреНрдпрд╛ рдЖрдк рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЧрд╝рд▓рдд рд╣реИ??

рдЧреАрддрд╛рддреНрдордХ-рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд╡рд┐рд╖рдпрд╛рдВрддрд░

рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рд╣рд╛рдЗрдЬреЗрдирдмрдЧ рд╕реЗ рд▓рдЧрднрдЧ рдПрдХ рдЪреМрдерд╛рдИ рд╕рджреА рдкрд╣рд▓реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдЖ рдерд╛ред рддрдм рдлрд╝реИрдХреНрд╕рдиреЗрдЯ рдореЗрдВ рдЧреЗрдЯрд╡реЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдкрд╛рдЗрдк FreeBSD рдХреЗ рдЕрдВрддрд░реНрдЧрдд "рдкреНрд▓реЗрдЗрдВрдЧ рдЪреЗрдХрд░реНрд╕"ред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдореИрдВ рдЦреБрдж рдХреЛ рдПрдХ рдЙрдиреНрдирдд рдФрд░ рдХрд╛рдлреА рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдорд╛рдирддрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реБрдП рд╣рд░ рдХрд╛рдо рдпрдерд╛рд╕рдВрднрд╡ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдФрд░ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдХрд┐рдпрд╛...

рд╕реЗрдВрдбрдореЗрд▓ рдФрд░ рдпреВрдпреВрд╕реАрдкреА/рдпреВрдпреВрдкреАрд╕реА рдореЗрдВ рдмрдЧ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдореЗрд░рд╛ рдкрд┐рдЫрд▓рд╛ рдЕрдиреБрднрд╡ "рд╕рдВрдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди" рдореЗрдВ рдореЗрд░реЗ рдкрд░рд┐рд╢реНрд░рдо рдореЗрдВ рдЬреБрдбрд╝ рдЧрдпрд╛ред рдЙрд╕ рдХрд╣рд╛рдиреА рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд╣рд╛рдЗрдЬреЗрдирдмрдЧ рд╕реЗ рджреЛ рд╕рдкреНрддрд╛рд╣ рддрдХ 10-14 рдШрдВрдЯреЗ рддрдХ рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд░рд╣рд╛ред рдЗрд╕рд▓рд┐рдП рдпрд╛рдж рдЖ рдЧрдпрд╛ рдФрд░ рдХрд▓ рдпрд╣ рдкреБрд░рд╛рдирд╛ рдкрд░рд┐рдЪрд┐рдд рдлрд┐рд░ рдорд┐рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд░реБрдХрд╛ред

рдЯреАрдПрд▓;рдбреАрдЖрд░ рдЙрддреНрддрд░

рдЙрдкрдпреЛрдЧрд┐рддрд╛ 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')"'

рдорд╛рдирд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд

рдпрд╣ рдпрд╣рд╛рдБ рдХреЗ рд▓рд┐рдП рдЖрдо рдмрд╛рдд рд╣реИ GNU рдореЗрдХ ╨╕ рдЦреВрдм рдЬреЛрд░ рд╕реЗ рдкреАрдЯрдирд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рддрд░реАрдХреЗ рд╕реЗ --version рдпрд╣ рдкреВрдЫрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХреМрди рд╣реИ, рдФрд░ рдпрджрд┐ рд╡рд┐рдХрд▓реНрдк рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рд╕реНрдЯрдм рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ "рдХреГрдкрдпрд╛ GCC рдпрд╛ CLANG рд╕рдВрдЧрдд рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ".

рдкрд╕рдВрдж рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд╣реАрдВ рднреА рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдпрд╣ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдерд╛ рдФрд░ рд╣рд░ рдЬрдЧрд╣ (рд▓рд┐рдирдХреНрд╕, рд╕реЛрд▓рд╛рд░рд┐рд╕, рдУрдПрд╕рдПрдХреНрд╕, рдлреНрд░реАрдмреАрдПрд╕рдбреА,) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред WSL рд╡рдЧреИрд░рд╣ред)ред рд▓реЗрдХрд┐рди рдХрд▓ рдореЗрдВ рдСрд▓реНрдЯрд▓рд┐рдирдХреНрд╕ рдордВрдЪ рдкрд░ рдПрд▓реНрдмреНрд░рд╕ 2000 (E2K) рдореИрдВрдиреЗ рдзреНрдпрд╛рди рджрд┐рдпрд╛:

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

рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдореИрдВ рддреБрд░рдВрдд рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ "рдкрд░рд┐рдЪрд┐рдд" рдХреЛ рдирд╣реАрдВ рдкрд╣рдЪрд╛рди рдкрд╛рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрд▓реНрдмреНрд░рд╕ рдФрд░ рдСрд▓реНрдЯ рд╕рд╣рд┐рдд рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рддрд░рдгреЛрдВ рдХреЗ рддрд╣рдд рдкрд╣рд▓реЗ рд╣реА рдХрдИ рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд╕рд╛рде, рдЬреАрдПрдирдпреВ рдореЗрдХ рдФрд░ рдмреИрд╢ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдЕрдкрдиреА рдЧрд▓рддреА рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛.

рдЬрдм рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдФрд░/рдпрд╛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛, рддреЛ рдФрд░ рдЕрдзрд┐рдХ рдЕрдЬреАрдм рдЪреАрдЬрд╝реЗрдВ рдШрдЯрд┐рдд рд╣реЛрдиреЗ рд▓рдЧреАрдВред
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдордВрддреНрд░:

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 рдЗрд╕реЗ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рдирд┐рдХрд╛рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдореИрдВ рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ рдЯреАрдореЛрдВ рдХреЗ рдкреНрд░рддрд┐ рдЕрдкрдирд╛ рдЖрднрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдПрдорд╕реАрдПрд╕рдЯреА ╨╕ рдСрд▓реНрдЯрд▓рд┐рдирдХреНрд╕ рдорд╣рд╛рди рдЙрддреНрдкрд╛рджрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП. рдЖрдкрдХрд╛ рд╕рдВрдХрд▓реНрдк рдЕрджреНрднреБрдд рд╣реИ!
рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦреЛ рдХреИрдорд░реЗрдбреНрд╕, рдКрдкрд░ рд╢рд░рдж рдЛрддреБ рдореЗрдВ рдмреИрдардХреЗрдВ!

рдзрдиреНрдпрд╡рд╛рдж рдмреЗрд░реЗрдЬрд╝ рдЯрд╛рдЗрдкреЛ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдХреЗрдбреАрдкреАрд╡реА рд╕реЗ рдЬреЙрд░реНрдЬреА рдП.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ