Mlaku Bash kanthi rinci

Yen sampeyan nemokake kaca iki ing telusuran, sampeyan bisa uga nyoba ngrampungake sawetara masalah nalika mlaku bash.

Mungkin lingkungan bash sampeyan ora nyetel variabel lingkungan lan sampeyan ora ngerti sebabe. Sampeyan bisa uga wis macet ing macem-macem file boot bash utawa profil utawa kabeh file kanthi acak nganti bisa.

Ing kasus apa wae, titik cathetan iki yaiku nggawe prosedur kanggo miwiti bash kanthi gampang supaya sampeyan bisa ngatasi masalah.

Diagram

Bagan alur iki ngringkes kabeh proses nalika mlaku bash.

Mlaku Bash kanthi rinci

Saiki ayo nliti saben bagean.

Login Shell?

Pisanan sampeyan kudu milih apa sampeyan ana ing cangkang login utawa ora.

Cangkang login minangka cangkang pisanan sing sampeyan lebokake nalika sampeyan mlebu kanggo sesi interaktif. Cangkang mlebu ora mbutuhake jeneng pangguna lan sandhi. Sampeyan bisa meksa cangkang mlebu kanggo miwiti kanthi nambahake gendera --login nalika diarani bash, contone:

bash --login

Cangkang login nyiyapake lingkungan dhasar nalika sampeyan miwiti cangkang bash.

Gawe gathuk ing rembugan?

Banjur sampeyan nemtokake manawa cangkang kasebut interaktif utawa ora.

Iki bisa dicenthang kanthi anané variabel PS1 (nginstal fungsi input perintah):

yen ["${PS1-}"]; banjur kumandhang interaktif liya kumandhang non-interaktif fi

Utawa ndeleng yen pilihan wis disetel -i, nggunakake variabel hyphen khusus - ing bash, contone:

$echo$-

Yen ana simbol ing output i, banjur cangkang interaktif.

Ing shell login?

Yen sampeyan ana ing cangkang login, banjur bash nggoleki file kasebut /etc/profile lan mlaku yen ana.

Banjur goleki salah siji saka telung file kasebut kanthi urutan ing ngisor iki:

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

Nalika ketemu siji, iku miwiti lan skip liyane.

Ing cangkang interaktif?

Yen sampeyan ana ing cangkang non-login, dianggep sampeyan wis ana ing cangkang login, lingkungan dikonfigurasi lan bakal diwarisake.

Ing kasus iki, rong file ing ngisor iki dieksekusi kanthi urutan, yen ana:

/etc/bash.bashrc ~/.bashrc

Ora ana pilihan?

Yen sampeyan ora ana ing cangkang login utawa cangkang interaktif, mula lingkungan sampeyan pancen bakal kosong. Iki nyebabake akeh kebingungan (ndeleng ngisor babagan proyek cron).

Ing kasus iki bash katon ing variabel BASH_ENV lingkungan sampeyan lan nggawe file sing cocog sing ditemtokake ing kana.

Kesulitan lan Aturan Umum

lowongan cron

95% wektu aku debug bash wiwitan iku amarga proyek cron ora mlaku kaya samesthine.

tugas sialan iki dianggo nggoleki nalika aku mbukak ing baris printah, nanging gagal nalika aku mbukak ing crontab.

iku loro alasan:

  • Proyek Cron ora interaktif.
  • Ora kaya skrip baris perintah, proyek cron ora entuk warisan lingkungan cangkang.

Biasane sampeyan ora bakal sok dong mirsani utawa peduli yen skrip cangkang ora interaktif amarga lingkungan kasebut diwenehi warisan saka cangkang interaktif. Iki tegese kabeh PATH и alias diatur kaya sing dikarepake.

Iki kok asring perlu kanggo nyetel tartamtu PATH kanggo tugas cron kaya ing kene:

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

Scripts nelpon saben liyane

Masalah umum liyane yaiku nalika skrip salah dikonfigurasi kanggo nelpon saben liyane. Tuladhane, /etc/profile mréntahaké kanggo ~/.bashrc.

Iki biasane kedadeyan nalika ana wong sing nyoba ndandani kesalahan lan kabeh katon bisa digunakake. Sayange, nalika sampeyan kudu misahake macem-macem jinis sesi kasebut, masalah anyar muncul.

Gambar Sandboxed Docker

Kanggo eksprimen nganggo cangkang, aku nggawe gambar Docker sing bisa digunakake kanggo debug nganggo cangkang ing lingkungan sing aman.

Bukak:

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

Dockerfile dumunung kene.

Kanggo meksa mlebu lan simulasi cangkang mlebu:

$ bash --login

Kanggo nguji set variabel BASH_ENV:

$ env | grep BASH_ENV

Kanggo debugging crontab skrip prasaja bakal dieksekusi saben menit (ing /root/ascript):

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

Source: www.habr.com

Add a comment