ืžืคืขื™ืœ ืืช Bash ื‘ืคื™ืจื•ื˜

ืื ืžืฆืืช ืืช ื”ื“ืฃ ื”ื–ื” ื‘ื—ื™ืคื•ืฉ, ื›ื ืจืื” ืฉืืชื” ืžื ืกื” ืœืคืชื•ืจ ื‘ืขื™ื” ื›ืœืฉื”ื™ ื‘ื”ืคืขืœืช bash.

ืื•ืœื™ ืกื‘ื™ื‘ืช ื”-bash ืฉืœืš ืœื ืžื’ื“ื™ืจื” ืžืฉืชื ื” ืกื‘ื™ื‘ื” ื•ืืชื” ืœื ืžื‘ื™ืŸ ืœืžื”. ื™ื™ืชื›ืŸ ืฉื ืชืงืขืช ืžืฉื”ื• ื‘ืงื‘ืฆื™ ืืชื—ื•ืœ ืื• ืคืจื•ืคื™ืœื™ื ืฉื•ื ื™ื ืฉืœ bash ืื• ื‘ื›ืœ ื”ืงื‘ืฆื™ื ื‘ืืงืจืื™ ืขื“ ืฉื–ื” ืขื‘ื“.

ื‘ื›ืœ ืžืงืจื”, ื”ืžื˜ืจื” ืฉืœ ื”ืขืจื” ื–ื• ื”ื™ื ืœืคืจื•ืก ืืช ื”ืœื™ืš ื”ืชื—ืœืช ื”ื‘ืืฉ ื‘ืฆื•ืจื” ืคืฉื•ื˜ื” ื›ื›ืœ ื”ืืคืฉืจ ื›ื“ื™ ืฉืชื•ื›ืœ ืœื”ืชืžื•ื“ื“ ืขื ื‘ืขื™ื•ืช.

ืชืจืฉื™ื

ืชืจืฉื™ื ื–ืจื™ืžื” ื–ื” ืžืกื›ื ืืช ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื‘ืขืช ื”ืคืขืœืช bash.

ืžืคืขื™ืœ ืืช Bash ื‘ืคื™ืจื•ื˜

ืขื›ืฉื™ื• ื‘ื•ืื• ื ืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ื›ืœ ื—ืœืง.

ืžืขื˜ืคืช ื›ื ื™ืกื”?

ืจืืฉื™ืช ืขืœื™ืš ืœื‘ื—ื•ืจ ืื ืืชื” ื‘ืžืขื˜ืคืช ื”ื”ืชื—ื‘ืจื•ืช ืื• ืœื.

ืžืขื˜ืคืช ื”ื›ื ื™ืกื” ื”ื™ื ื”ืžืขื˜ืคืช ื”ืจืืฉื•ื ื” ืฉืืชื” ืžื–ื™ืŸ ื›ืฉืืชื” ื ื›ื ืก ืœื”ืคืขืœื” ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ืช. ืžืขื˜ืคืช ื”ื›ื ื™ืกื” ืื™ื ื” ื“ื•ืจืฉืช ืฉื ืžืฉืชืžืฉ ื•ืกื™ืกืžื”. ืืชื” ื™ื›ื•ืœ ืœืืœืฅ ืืช ืžืขื˜ืคืช ื”ื›ื ื™ืกื” ืœื”ืชื—ื™ืœ ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ื“ื’ืœ --login ื›ืฉืงื•ืจืื™ื ืœื• bash, ืœื“ื•ื’ืžื”:

bash --ื›ื ื™ืกื”

ืžืขื˜ืคืช ื”ื›ื ื™ืกื” ืžื’ื“ื™ืจื” ืืช ืกื‘ื™ื‘ืช ื”ื‘ืกื™ืก ื›ืืฉืจ ืืชื” ืžืคืขื™ืœ ืœืจืืฉื•ื ื” ืืช ืžืขื˜ืคืช bash.

ืื™ื ื˜ืจืืงื˜ื™ื‘ื™?

ืœืื—ืจ ืžื›ืŸ ืืชื” ืงื•ื‘ืข ืื ื”ืžืขื˜ืคืช ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ืช ืื• ืœื.

ื ื™ืชืŸ ืœื‘ื“ื•ืง ื–ืืช ืขืœ ื™ื“ื™ ื ื•ื›ื—ื•ืช ื”ืžืฉืชื ื” PS1 (ื–ื” ืžืชืงื™ืŸ ืืช ืคื•ื ืงืฆื™ื™ืช ืงืœื˜ ื”ืคืงื•ื“ื”):

if [ "${PS1-}" ]; ื•ืื– echo interactive else echo non-interactive fi

ืื• ืœืจืื•ืช ืื ื”ืืคืฉืจื•ืช ืžื•ื’ื“ืจืช -i, ื‘ืืžืฆืขื•ืช ืžืฉืชื ื” ืžืงืฃ ืžื™ื•ื—ื“ - ื‘-bash, ืœืžืฉืœ:

$echo$-

ืื ื™ืฉ ืกืžืœ ื‘ืคืœื˜ i, ืื– ื”ืงืœื™ืคื” ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ืช.

ื‘ืžืขื˜ืคืช ื”ื›ื ื™ืกื”?

ืื ืืชื” ื ืžืฆื ื‘ืžืขื˜ืคืช ื›ื ื™ืกื”, ืื– bash ืžื—ืคืฉ ืืช ื”ืงื•ื‘ืฅ /etc/profile ื•ืคื•ืขืœ ืื ื”ื•ื ืงื™ื™ื.

ืœืื—ืจ ืžื›ืŸ ืžื—ืคืฉ ื›ืœ ืื—ื“ ืžืฉืœื•ืฉืช ื”ืงื‘ืฆื™ื ื”ืืœื” ื‘ืกื“ืจ ื”ื‘ื:

~/.bash_profile ~/.bash_login ~/.profile

ื›ืืฉืจ ื”ื•ื ืžื•ืฆื ืื—ื“, ื”ื•ื ืžืชื—ื™ืœ ืื•ืชื• ื•ืžื“ืœื’ ืขืœ ื”ืื—ืจื™ื.

ื‘ืžืขื˜ืคืช ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ืช?

ืื ืืชื” ื ืžืฆื ื‘ืžืขื˜ืคืช ืฉืื™ื ื” ืžื—ื•ื‘ืจืช, ื”ื”ื ื—ื” ื”ื™ื ืฉื›ื‘ืจ ื”ื™ื™ืช ื‘ืžืขื˜ืคืช ื›ื ื™ืกื”, ื”ืกื‘ื™ื‘ื” ืžื•ื’ื“ืจืช ื•ืชืขื‘ื•ืจ ื‘ื™ืจื•ืฉื”.

ื‘ืžืงืจื” ื–ื”, ืฉื ื™ ื”ืงื‘ืฆื™ื ื”ื‘ืื™ื ืžื‘ื•ืฆืขื™ื ืœืคื™ ื”ืกื“ืจ, ืื ื”ื ืงื™ื™ืžื™ื:

/etc/bash.bashrc ~/.bashrc

ืื™ืŸ ืืคืฉืจื•ืช?

ืื ืื™ื ืš ื ืžืฆื ื‘ืžืขื˜ืคืช ื›ื ื™ืกื” ืื• ื‘ืžืขื˜ืคืช ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ืช, ื”ืกื‘ื™ื‘ื” ืฉืœืš ืื›ืŸ ืชื”ื™ื” ืจื™ืงื”. ื–ื” ื’ื•ืจื ืœื‘ืœื‘ื•ืœ ืจื‘ (ืจืื” ืœื”ืœืŸ ืขืœ ืขื‘ื•ื“ื•ืช cron).

ื‘ืžืงืจื” ื–ื” bash ืžืกืชื›ืœ ืขืœ ื”ืžืฉืชื ื” BASH_ENV ื”ืกื‘ื™ื‘ื” ืฉืœืš ื•ื™ื•ืฆืจ ืืช ื”ืงื•ื‘ืฅ ื”ืžืชืื™ื ืฉืฆื•ื™ืŸ ืฉื.

ืงืฉื™ื™ื ื ืคื•ืฆื™ื ื•ื›ืœืœื™ ืืฆื‘ืข

ืžืฉืจื•ืช ืงืจื•ืŸ

95% ืžื”ื–ืžืŸ ืฉืื ื™ ืžื ืคื” ื‘ืื’ื™ื ื‘ื”ืคืขืœื” ืฉืœ bash ื–ื” ื‘ื’ืœืœ ืฉืขื‘ื•ื“ืช ื”-cron ืœื ืคื•ืขืœืช ื›ืžืฆื•ืคื”.

ื”ืžืฉื™ืžื” ื”ืืจื•ืจื” ื”ื–ื• ืขื•ื‘ื“ ืžืฆื•ื™ืŸ ื›ืฉืื ื™ ืžืคืขื™ืœ ืื•ืชื• ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื”, ืื‘ืœ ื ื›ืฉืœ ื›ืฉืื ื™ ืžืคืขื™ืœ ืื•ืชื• ื‘-crontab.

ื›ืืŸ ืฉืชื™ ืกื™ื‘ื•ืช:

  • ืžืฉืจื•ืช Cron ืื™ื ืŸ ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื•ืช.
  • ืฉืœื ื›ืžื• ืกืงืจื™ืคื˜ื™ื ืฉืœ ืฉื•ืจืช ื”ืคืงื•ื“ื”, ืขื‘ื•ื“ื•ืช cron ืœื ื™ื•ืจืฉื•ืช ืืช ืกื‘ื™ื‘ืช ื”ืžืขื˜ืคืช.

ื‘ื“ืจืš ื›ืœืœ ืœื ืชื‘ื—ื™ืŸ ืื• ืื›ืคืช ืœืš ืฉืกืงืจื™ืคื˜ ืžืขื˜ืคืช ืื™ื ื• ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ ืžื›ื™ื•ื•ืŸ ืฉื”ืกื‘ื™ื‘ื” ื™ื•ืจืฉืช ืžื”ืžืขื˜ืคืช ื”ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ืช. ื–ื” ืื•ืžืจ ืฉื”ื›ืœ PATH ะธ alias ืžื•ื’ื“ืจ ื›ืคื™ ืฉื”ื™ื™ืช ืžืฆืคื”.

ื–ื• ื”ืกื™ื‘ื” ืฉืœืขืชื™ื ืงืจื•ื‘ื•ืช ื™ืฉ ืฆื•ืจืš ืœื”ื’ื“ื™ืจ ืกืคืฆื™ืคื™ PATH ืขื‘ื•ืจ ืžืฉื™ืžืช cron ื›ืžื• ื›ืืŸ:

* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram

ืชืกืจื™ื˜ื™ื ืงื•ืจืื™ื ื–ื” ืœื–ื”

ื‘ืขื™ื” ื ืคื•ืฆื” ื ื•ืกืคืช ื”ื™ื ื›ืืฉืจ ืกืงืจื™ืคื˜ื™ื ืžื•ื’ื“ืจื™ื ื‘ื˜ืขื•ืช ืœื”ืชืงืฉืจ ืื—ื“ ืœืฉื ื™. ืœื“ื•ื’ืžื”, /etc/profile ืžื•ืฉืš ืœ ~/.bashrc.

ื–ื” ืงื•ืจื” ื‘ื“ืจืš ื›ืœืœ ื›ืฉืžื™ืฉื”ื• ื ื™ืกื” ืœืชืงืŸ ืฉื’ื™ืื” ื›ืœืฉื”ื™ ื•ื ืจืื” ืฉื”ื›ืœ ืขื•ื‘ื“. ืœืžืจื‘ื” ื”ืฆืขืจ, ื›ืืฉืจ ืืชื” ืฆืจื™ืš ืœื”ืคืจื™ื“ ื‘ื™ืŸ ืกื•ื’ื™ ื”ืคืขืœื•ืช ืฉื•ื ื™ื, ืฆืฆื•ืช ื‘ืขื™ื•ืช ื—ื“ืฉื•ืช.

ืชืžื•ื ืช Docker ื‘ืืจื’ื– ื—ื•ืœ

ื›ื“ื™ ืœื”ืชื ืกื•ืช ื‘ื”ืคืขืœืช ืžืขื˜ืคืช, ื™ืฆืจืชื™ ืชืžื•ื ืช Docker ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื” ื›ื“ื™ ืœื ืคื•ืช ื‘ืื’ื™ื ื‘ื”ืคืขืœืช ืžืขื˜ืคืช ื‘ืกื‘ื™ื‘ื” ืžืื•ื‘ื˜ื—ืช.

ืœึฐื”ึทืฉืึดื™ืง:

$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash

Dockerfile ื ืžืฆื ื›ืืŸ.

ื›ื“ื™ ืœืืœืฅ ื›ื ื™ืกื” ื•ืœื“ืžื•ืช ืžืขื˜ืคืช ื›ื ื™ืกื”:

$ bash --login

ื›ื“ื™ ืœื‘ื“ื•ืง ืงื‘ื•ืฆื” ืฉืœ ืžืฉืชื ื™ื BASH_ENV:

$ env | grep BASH_ENV

ืœืฆื•ืจืš ืื™ืชื•ืจ ื‘ืื’ื™ื crontab ืกืงืจื™ืคื˜ ืคืฉื•ื˜ ื™ื‘ื•ืฆืข ื‘ื›ืœ ื“ืงื” (ื‘ /root/ascript):

$ crontab -l
$ cat /var/log/script.log

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”