Bash-г нарийвчлан ажиллуулж байна

Хэрэв та энэ хуудсыг хайлтаар олсон бол bash-г ажиллуулахтай холбоотой асуудлыг шийдэхийг оролдож байгаа байх.

Магадгүй таны bash орчин орчны хувьсагчийг тохируулаагүй байгаа бөгөөд та яагаад гэдгийг ойлгохгүй байна. Та янз бүрийн bash ачаалах файл эсвэл профайл эсвэл бүх файлд санамсаргүй байдлаар ямар нэгэн зүйл гацсан байж магадгүй.

Ямар ч тохиолдолд, энэ тэмдэглэлийн гол зорилго нь bash-ийг эхлүүлэх журмыг аль болох энгийн байдлаар гаргах бөгөөд ингэснээр та асуудлыг шийдвэрлэх боломжтой болно.

Диаграм

Энэхүү урсгал диаграм нь bash-г ажиллуулж байх үеийн бүх үйл явцыг нэгтгэн харуулав.

Bash-г нарийвчлан ажиллуулж байна

Одоо хэсэг бүрийг нарийвчлан авч үзье.

Shell-д нэвтрэх үү?

Эхлээд та нэвтрэх бүрхүүлд байгаа эсэхээ сонгох хэрэгтэй.

Нэвтрэх бүрхүүл нь интерактив сессэд нэвтрэх үед таны оруулах анхны бүрхүүл юм. Нэвтрэх бүрхүүл нь хэрэглэгчийн нэр, нууц үг шаарддаггүй. Та далбаа нэмснээр нэвтрэх бүрхүүлийг хүчээр эхлүүлэх боломжтой --login дуудсан үед bashЖишээ нь:

bash - нэвтрэх

Нэвтрэх бүрхүүл нь таныг bash shell-ийг анх эхлүүлэхэд үндсэн орчныг бүрдүүлдэг.

Интерактив уу?

Дараа нь та бүрхүүл интерактив эсэхийг тодорхойлно.

Үүнийг хувьсагч байгаа эсэхээр шалгаж болно PS1 (энэ нь тушаал оруулах функцийг суулгадаг):

хэрэв [ "${PS1-}" ]; дараа нь echo интерактив бусад цуурай интерактив бус fi

Эсвэл тохируулагдсан эсэхийг харна уу -i, тусгай зураас хувьсагч ашиглан - bash дээр жишээ нь:

$echo$-

Хэрэв гаралтад тэмдэг байгаа бол i, дараа нь бүрхүүл интерактив байна.

Нэвтрэх бүрхүүлд?

Хэрэв та нэвтрэх бүрхүүлд байгаа бол bash файлыг хайдаг /etc/profile хэрэв байгаа бол ажиллуулна.

Дараа нь эдгээр гурван файлын аль нэгийг нь дараах дарааллаар хайна.

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

Нэгийг нь олчихвол эхлүүлээд бусдыг нь алгасдаг.

Интерактив бүрхүүлд үү?

Хэрэв та нэвтэрдэггүй бүрхүүлд байгаа бол таныг нэвтрэх бүрхүүлд аль хэдийн орсон гэж үзнэ, орчин тохируулагдсан бөгөөд өвлөгдөнө.

Энэ тохиолдолд дараах хоёр файл байгаа бол дарааллаар нь гүйцэтгэнэ.

/etc/bash.bashrc ~/.bashrc

Сонголт байхгүй юу?

Хэрэв та нэвтрэх бүрхүүл эсвэл интерактив бүрхүүлд байхгүй бол таны орчин үнэхээр хоосон байх болно. Энэ нь маш их төөрөгдөл үүсгэдэг (cron ажлын байрны талаар доороос үзнэ үү).

Энэ тохиолдолд bash хувьсагчийг хардаг BASH_ENV таны орчныг үүсгэж, тэнд заасан харгалзах файлыг үүсгэнэ.

Нийтлэг бэрхшээлүүд ба эрхий хурууны дүрэм

cron ажил

95% нь би bash эхлүүлэхийг дибаг хийдэг нь cron ажил санаснаараа ажиллахгүй байгаатай холбоотой.

Энэ хараал идсэн даалгавар Би үүнийг командын мөрөнд ажиллуулахад сайн ажилладаг боловч crontab дээр ажиллуулахад бүтэлгүйтдэг.

энд хоёр шалтгаан:

  • Cron ажлууд нь интерактив биш юм.
  • Тушаалын мөрийн скриптүүдээс ялгаатай нь cron ажлууд нь бүрхүүлийн орчныг өвлөн авдаггүй.

Ер нь орчин нь интерактив бүрхүүлээс өвлөгддөг тул бүрхүүлийн скрипт нь интерактив биш гэдгийг та анзаардаггүй. Энэ нь бүх зүйл гэсэн үг юм PATH и alias таны бодож байсан шиг тохируулсан.

Ийм учраас ихэвчлэн тодорхой тогтоох шаардлагатай байдаг PATH үүнтэй адил cron даалгаврын хувьд:

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

Бие биенээ дууддаг скриптүүд

Өөр нэг нийтлэг асуудал бол скриптүүд бие биенээ дуудахаар буруу тохируулагдсан байдаг. Жишээлбэл, /etc/profile руу ханддаг ~/.bashrc.

Энэ нь ихэвчлэн хэн нэгэн алдаа засах гэж оролдсон бөгөөд бүх зүйл бүтсэн мэт санагдсан үед тохиолддог. Харамсалтай нь, эдгээр өөр төрлийн сессүүдийг салгах шаардлагатай үед шинэ асуудлууд гарч ирдэг.

Sandboxed 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

сэтгэгдэл нэмэх