$> set -o pipefail
$> fortune | head -1 > /dev/null && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!" || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
ΠΠΎΠ²Π΅Π·Π»ΠΎ!
$> fortune | head -1 > /dev/null && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ!" || echo "ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ"
ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ
ΠΠ΄Π΅ΡΡ fortune
ΡΡΠ»ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±Π΅Π· exit(rand())
.
CΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ ΡΡΠΎ Π·Π΄Π΅ΡΡ Π³Π»ΡΡΠΈΡ?
ΠΠΈΡΠΈΡΠ½ΠΎ-ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅
ΠΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· Ρ ΡΡΠΈΠΌ ΠΠ΅ΠΉΠ·Π΅Π½Π±Π°Π³ΠΎΠΌ Ρ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΡΡ ΡΠ΅ΡΠ²Π΅ΡΡΡ Π²Π΅ΠΊΠ° Π½Π°Π·Π°Π΄. Π’ΠΎΠ³Π΄Π° Π΄Π»Ρ ΡΠ»ΡΠ·Π° Π² FaxNET ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΈΠ»ΠΈΡ ΡΠ΅ΡΠ΅Π·
Π£ΡΠ΅ΡΠ΄ΠΈΡ Π² Β«ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊΒ» ΠΌΠ½Π΅ ΡΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΎΠΏΡΡ Π±ΠΎΡΡΠ±Ρ Ρ Π±Π°Π³Π°ΠΌΠΈ Π² 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')"'
Π ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅ Π½Π° ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΈΠΉ
ΠΠ΄Π΅ΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ Π΄Π»Ρ --version
ΡΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΡΠΎ ΠΎΠ½ ΡΠ°ΠΊΠΎΠΉ, Π° Π΅ΡΠ»ΠΈ ΠΎΠΏΡΠΈΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, ΡΠΎ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π·Π°Π³Π»ΡΡΠΊΠ° "Please use GCC or CLANG compatible compiler".
ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΉ
#define MDBX_BUILD_COMPILER "lcc:1.23.20:Sep--4-2019:e2k-v3-linux Please use GCC or CLANG compatible compiler"
ΠΡΠΈΠ·Π½Π°ΡΡΡΡ Ρ Π½Π΅ ΡΡΠ°Π·Ρ ΡΠ°Π·Π³Π»ΡΠ΄Π΅Π» ΡΡΠ°ΡΠΎΠ³ΠΎ "Π·Π½Π°ΠΊΠΎΠΌΠΎΠ³ΠΎ". ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ»ΡΡ Π½Π° "ΠΠ»ΡΠ±ΡΡΡΠ°Ρ " ΠΈ ΠΏΠΎΠ΄ ΠΌΠ°ΡΡΠΎΠΉ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ², Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Ρ "ΠΠ»ΡΡΠΎΠΌ". Π‘ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ, Π²Π΅ΡΡΠΈΡΠΌΠΈ GNU Make ΠΈ bash. ΠΠΎΡΡΠΎΠΌΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΎΠΏΠ»ΠΎΡΠ½ΠΎΡΡΠΈ Ρ ΡΡΡ Π²ΠΈΠ΄Π΅ΡΡ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Ρ ΠΎΡΠ΅Π».
ΠΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ/ΠΈΠ»ΠΈ ΠΏΠΎΠ½ΡΡΡ Π² ΡΠ΅ΠΌ Π΄Π΅Π»ΠΎ ΡΡΡΠ°Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΡΠ°Π»ΠΎ Π±ΠΎΠ»ΡΡΠ΅.
ΠΠ°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅:
echo "#define MDBX_BUILD_COMPILER '$(set -o pipefail; LC_ALL=C cc --version | head -1 || echo "Please use GCC or CLANG compatible compiler")'"
Π§Π΅ΡΠ΅Π·-ΡΠ°Π· ΡΠΎ Π²ΡΠ΄Π°Π²Π°Π»ΠΎ Π»ΠΈΡΠ½ΠΈΠΉ ΡΠ΅ΠΊΡΡ, ΡΠΎ Π½Π΅Ρβ¦ ΠΠ΅ΡΠ΅Π΄ΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π·Π°Π»ΠΈΠΏΠ°Π» Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΡΡΠΊΠ°ΡΡ ΠΏΠΎΠ΄ΠΎΠ»ΡΡΠ΅ ΡΠΎ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈΡΡ ΠΎΠ±Π°!
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, strace
ΠΡΡΠ°ΡΠΈ, ΠΊΠ°ΠΊ Π»ΡΠ±ΠΎΠΉ ΡΠ²Π°ΠΆΠ°ΡΡΠΈΠΉ ΡΠ΅Π±Ρ 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) Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΠΉ. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
Π»ΡΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π±Π΄Π΅ΡΡ, Ρ
ΠΎΡΡ ΡΡΠΎ ΠΈ Π²ΡΡΠ²Π»ΡΠ΅Ρ Π²Π½Π΅Π·Π°ΠΏΠ½ΡΠ΅ Π½Π΅Π΄ΠΎΡΠ΅ΡΡ Π² boilerplate ΡΠ°ΡΡΡΠΈΡΠ°Π½Π½ΡΠΌ Π½Π° ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ?
ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ:
fortune | head -1 && echo "ΠΠΎΠ²Π΅Π·Π»ΠΎ, Π½ΠΎ Π²Ρ ΡΠΈΡΠΊΡΠ΅ΡΠ΅!" || echo "WTF?"
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ:
-
(fortune && echo "Π£ΡΠΏΠ΅ΡΠ½ΠΎ" || echo "ΠΡΠΈΠ±ΠΊΠ°") | head -1
ΠΠ΄Π΅ΡΡ ΡΠ°Π½Π½Π΅Π΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ("Π²Π½ΡΡΡΠΈ" ΡΠΊΠΎΠ±ΠΎΠΊ). Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΡΠ»ΠΈ
fortune
ΡΠΎΠΎΠ±ΡΠΈΡ Π² ΡΡΠ°ΡΡΡΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ°Π½Π°Π», ΡΠΎ Π²ΡΠ²ΠΎΠ΄|| echo "ΠΡΠΈΠ±ΠΊΠ°"
ΡΠΆΠ΅ Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°Π½Π°Π» ΡΠΆΠ΅ Π·Π°ΠΊΡΡΡ. -
fortune | cat - | head -1 && echo "Π£ΡΠΏΠ΅ΡΠ½ΠΎ" || echo "ΠΡΠΈΠ±ΠΊΠ°"
ΠΠ΄Π΅ΡΡ ΡΡΠΈΠ»ΠΈΡΠ°
cat
Π²ΡΡΡΡΠΏΠ°Π΅Ρ Π΄Π΅ΠΌΠΏΡΠ΅ΡΠΎΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΊΡEPIPE
ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅. ΠΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΊΠ° Π²ΡΠ²ΠΎΠ΄fortune
Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ) ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΊΠ°Π½Π°Π»ΡΠ½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅ (ΠΎΡ 512 Π±Π°ΠΉΡ Π΄ΠΎ β64Π, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΠΠ‘ β₯4Π). Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ.
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ EPIPE
ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ?
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅Ρ, Π½ΠΎ Π΅ΡΡΡ ΠΏΡΠΎΡΡΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ:
EPIPE
ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ (ΠΈ ΠΎΡΡΠ°ΠΆΠ°ΡΡ Π² ΡΡΠ°ΡΡΡΠ΅ Π²ΡΡ ΠΎΠ΄Π°) ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π΄Π°Π½Π½ΡΡ ΡΡΠ΅Π±ΡΡΡΠΈΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Ρ ΠΎΠ΄Π΅ ΡΠ°Π±ΠΎΡΡ Π°ΡΡ ΠΈΠ²Π°ΡΠΎΡΠΎΠ² ΠΈΠ»ΠΈ ΡΡΠΈΠ»ΠΈΡ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ.EPIPE
Π»ΡΡΡΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡΠΈΡΠΌ--help
ΠΈΠ»ΠΈ--version
.- ΠΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄
| head
, ΡΠΎEPIPE
Π»ΡΡΡΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΈΠ½Π°ΡΠ΅ Π»ΡΡΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈ ΠΎΡΡΠ°ΠΆΠ°ΡΡ Π² ΡΡΠ°ΡΡΡΠ΅ Π²ΡΡ ΠΎΠ΄Π°.
ΠΠΎΠ»ΡΠ·ΡΡΡΡ ΡΠ»ΡΡΠ°Π΅ΠΌ Ρ
ΠΎΡΡ Π²ΡΡΠ°Π·ΠΈΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ²Π°ΠΌ
Π’Π°ΠΊ Π΄Π΅ΡΠΆΠ°ΡΡ Camarades, Π΄ΠΎ
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
ΠΠΠΠ ΠΎΡ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com