Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования Π½Π° языкС сцСнариСв ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 33

Автор МСндСль ΠšΡƒΠΏΠ΅Ρ€

variable1=22

variable2=474

variable3=5

variable4=97


message1="ΠŸΡ€ΠΈΠ²Π΅Ρ‚! Как ΠΏΠΎΠΆΠΈΠ²Π°Π΅Ρ‚Π΅?"

message2="Досвидания!"


print_message ()

{

# Π’Ρ‹Π²ΠΎΠ΄ сообщСния ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.


if [ -z "$1" ]

then

return 1

# Ошибка, Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ отсутствуСт.

fi


echo


until [ -z "$1" ]

do

# Π¦ΠΈΠΊΠ» ΠΏΠΎ всСм Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

echo -n "$1"

# Π’Ρ‹Π²ΠΎΠ΄ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° с ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ символа ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.

echo -n " "

# Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π», для раздСлСния Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

shift

# ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ.

done


echo


return 0

}

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Π°ΠΆΠ΅ самого сСбя, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этому Π΅Π΄Π²Π° Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ°ΠΊΠΎΠ΅ Π»ΠΈΠ±ΠΎ практичСскоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-19. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ (бСсполСзный) сцСнария, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ сСбя самого.

#!/bin/bash

# self-source.sh: сцСнарий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСкурсивно ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ сСбя самого."

# Из "БСстолковыС Ρ‚Ρ€ΡŽΠΊΠΈ", Ρ‚ΠΎΠΌ II.


MAXPASSCNT=100 # МаксимальноС количСство ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ².


echo -n "$pass_count "

# На ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π΄Π²Π° ΠΏΡ€ΠΎΠ±Π΅Π»Π°,

#+ Ρ‚.ΠΊ. $pass_count Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°.


let "pass_count += 1"

# ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $pass_count

#+ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Π²ΠΏΠΎΠ»Π½Π΅ допустима.

# Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌ срабатываСт Π² Bash ΠΈ pdksh, Π½ΠΎ,

#+ ΠΏΡ€ΠΈ пСрСносС сцСнария Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ,

#+ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСработоспособным ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ опасным.

# Π›ΡƒΡ‡ΡˆΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· полоТСния, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $pass_count

#+ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, Ссли ΠΎΠ½Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°.


while [ "$pass_count" -le $MAXPASSCNT ]

do

. $0 # "ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅" самого сСбя.

# ./$0 (истинная рСкурсия) Π² Π΄Π°Π½Π½ΠΎΠΉ ситуации Π½Π΅ сработаСт.

done


# ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΡΡ‰Π΅Π΅ здСсь фактичСски Π½Π΅ являСтся рСкурсиСй ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ,

#+ Ρ‚.ΠΊ. сцСнарий ΠΊΠ°ΠΊ Π±Ρ‹ "Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚" сСбя самого

#+ (добавляя Π½ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°)

#+ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π° 'while',

#+ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ 'source' Π² строкС 22.

#

# Π‘Π°ΠΌΠΎ собой разумССтся, Ρ‡Ρ‚ΠΎ пСрвая строка (#!), вновь ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ сцСнария,

#+ интСрпрСтируСтся ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Π° Π½Π΅ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ сцСнария (sha-bang)


echo


exit 0 # The net effect is counting from 1 to 100.

# Very impressive.


# Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅:

# ----------

# ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ сцСнарий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовал Π±Ρ‹ этот Ρ‚Ρ€ΡŽΠΊ для Ρ‡Π΅Π³ΠΎ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ.

exit

БСзусловноС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сцСнария. КомандС exit ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ процСссу ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. Π’ΠΎΠΎΠ±Ρ‰Π΅, считаСтся Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ сцСнария, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… случаСв, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ exit 0, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ.

Если сцСнарий Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ exit Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ Π² качСствС ΠΊΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сцСнария принимаСтся ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ послСднСй Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π΅ считая самой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ exit.

exec

Π­Ρ‚ΠΎ встроСнная ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° shell, замСняСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ процСсс Π½ΠΎΠ²Ρ‹ΠΌ процСссом, запускаСмым ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ exec. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ встрСчаСт эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. ΠŸΡ€ΠΈ использовании встроСнной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ exec, ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π½Π΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ процСсс, Π° замСняСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ процСсс Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Для сцСнария это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ сразу послС исполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ exec. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ссли Π²Π°ΠΌ встрСтится exec Π² сцСнарии, Ρ‚ΠΎ, скорСС всСго это Π±ΡƒΠ΄Π΅Ρ‚ послСдняя ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² сцСнарии.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-20. Команда exec

#!/bin/bash


exec echo "Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ \"$0\"." # Π­Ρ‚ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сцСнария.


# ----------------------------------

# Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π½ΠΈΠΆΠ΅ строки Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ исполнСны

echo "Π­Ρ‚Π° строка Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° Π½Π° экран."


exit 99 # Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π΅ здСсь.

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сцСнария

#+ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ 'echo $?'.

# Он Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ 99.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11-21. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСт сСбя самого

#!/bin/bash

# self-exec.sh


echo


echo "Π­Ρ‚Π° строка Π² сцСнарии СдинствСнная, Π½ΠΎ ΠΎΠ½Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π· Π·Π° Ρ€Π°Π·ΠΎΠΌ."

echo "PID остался Ρ€Π°Π²Π½Ρ‹ΠΌ $$."

# ДСмонстрация Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° exec Π½Π΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс.


echo "==================== Для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ - Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Ctl-C ===================="


sleep 1


exec $0 # Запуск ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ экзСмпляра этого ΠΆΠ΅ сцСнария

#+ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ.


echo "Π­Ρ‚Π° строка Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π°!" # ΠŸΠΎΡ‡Π΅ΠΌΡƒ?


exit 0

Команда exec Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для пСрСнаправлСния. Π’Π°ΠΊ, ΠΊΠΎΠΌΠ°Π½Π΄Π° exec <zzz-file Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ стандартноС устройство Π²Π²ΠΎΠ΄Π° (stdin) Ρ„Π°ΠΉΠ»ΠΎΠΌ zzz-file (см. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 16-1).

ΠšΠ»ΡŽΡ‡ -exec ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ find -- это Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ встроСнная ΠΊΠΎΠΌΠ°Π½Π΄Π° exec.

shopt

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ (ΠΎΠΏΡ†ΠΈΠΈ) ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π½Π° Π»Π΅Ρ‚Ρƒ (см. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 23-1 ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 23-2). Π•Π΅ часто ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² стартовых Ρ„Π°ΠΉΠ»Π°Ρ…, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… сцСнариях. Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Bash вСрсии 2 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅.

shopt -s cdspell

# Π˜ΡΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ орфографичСскиС ошибки Π² ΠΈΠΌΠ΅Π½Π°Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ 'cd'


cd /hpme # Oops! ИмСлось Π²Π²ΠΈΠ΄Ρƒ '/home'.

pwd # /home

# Shell исправил ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΡƒ.


ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

true

Команда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ -- ноль, ΠΈΠ»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅, ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ большС.

# БСсконСчный Ρ†ΠΈΠΊΠ»

while true # вмСсто ":"

do

operation-1

operation-2

...

operation-n

# Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ способ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π°.

done


false

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅, ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅.

# Π¦ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ исполнСн

while false

do

# Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ исполнСн Π½ΠΈΠΊΠΎΠ³Π΄Π°.

operation-1

operation-2

...

operation-n

done


type [cmd]

ΠžΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° внСшнюю ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ which, type cmd Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ "cmd". Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ which, type являСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Bash. Π‘ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -a Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½ΠΎ ΠΈ опрСдСляСт мСстополоТСниС Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ.

bash$ type '['

[ is a shell builtin

bash$ type -a '['

[ is a shell builtin

[ is /usr/bin/[


hash [cmds]

Π—Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ (Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ), благодаря Ρ‡Π΅ΠΌΡƒ, ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½Π΅ΠΉ, ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΈΠ»ΠΈ сцСнарий ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π² $PATH. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ hash Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², просто Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π‘ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ -r -- ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

help

help COMMAND -- Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΡƒΡŽ справку ΠΏΠΎ использованию Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ COMMAND. Аналог ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ whatis, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄.

bash$ help exit

exit: exit [n]

Exit the shell with a status of N. If N is omitted, the exit status

is that of the last command executed.


11.1. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ управлСния заданиями

НСкоторыС ΠΈΠ· Π½ΠΈΠΆΠ΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚, Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, "ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ задания". Π‘ΠΌ. Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² ΠΊΠΎΠ½Ρ†Π΅ Π³Π»Π°Π²Ρ‹.

jobs

Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π² Ρ„ΠΎΠ½Π΅. Команда ps Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Π°.

Задания ΠΈ процСссы Π»Π΅Π³ΠΊΠΎ ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ. НСкоторыС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ kill, disown ΠΈ wait ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π»ΠΈΠ±ΠΎ Π½ΠΎΠΌΠ΅Ρ€ задания, Π»ΠΈΠ±ΠΎ Π½ΠΎΠΌΠ΅Ρ€ процСсса. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ fg, bg ΠΈ jobs ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠΌΠ΅Ρ€ задания.