Detaljno pokretanje Basha

Ako ste pronašli ovu stranicu u pretrazi, vjerojatno pokušavate riješiti neki problem s pokretanjem basha.

Možda vaše bash okruženje ne postavlja varijablu okruženja i ne razumijete zašto. Možda ste zaglavili nešto u raznim bash boot datotekama ili profilima ili u svim datotekama nasumično dok nije proradilo.

U svakom slučaju, svrha ove bilješke je izložiti proceduru za pokretanje basha što je jednostavnije moguće tako da se možete nositi s problemima.

Dijagram

Ovaj dijagram toka sažima sve procese prilikom pokretanja basha.

Detaljno pokretanje Basha

Sada pogledajmo pobliže svaki dio.

Prijava Shell?

Prvo trebate odabrati jeste li u ljusci za prijavu ili ne.

Ljuska za prijavu je prva ljuska u koju ulazite kada se prijavljujete za interaktivnu sesiju. Ljuska za prijavu ne zahtijeva korisničko ime i lozinku. Možete prisilno pokrenuti ljusku za prijavu dodavanjem oznake --login kad se prozove bash, na primjer:

bash --prijava

Ljuska za prijavu postavlja osnovno okruženje kada prvi put pokrenete bash ljusku.

Interaktivan?

Zatim određujete je li ljuska interaktivna ili ne.

To se može provjeriti prisutnošću varijable PS1 (instalira funkciju unosa naredbi):

if [ "${PS1-}" ]; then echo interactive else echo non-interactive fi

Ili pogledajte je li opcija postavljena -i, pomoću posebne varijable crtice - u bashu, na primjer:

$echo$-

Ako postoji simbol u izlazu i, tada je ljuska interaktivna.

U ljusci za prijavu?

Ako ste u ljusci za prijavu, tada bash traži datoteku /etc/profile i pokreće se ako postoji.

Zatim traži bilo koju od ove tri datoteke sljedećim redoslijedom:

~/.bash_profil ~/.bash_login ~/.profil

Kad pronađe jedan, pokreće ga i preskače ostale.

U interaktivnoj ljusci?

Ako ste u ljusci bez prijave, pretpostavlja se da ste već bili u ljusci za prijavu, okruženje je konfigurirano i bit će naslijeđeno.

U ovom slučaju, sljedeće dvije datoteke se izvršavaju redom, ako postoje:

/etc/bash.bashrc ~/.bashrc

Nema mogućnosti?

Ako niste ni u ljusci za prijavu ni u interaktivnoj ljusci, tada će vaše okruženje doista biti prazno. To uzrokuje mnogo zabune (pogledajte dolje o cron poslovima).

U ovom slučaju bash gleda varijablu BASH_ENV vaše okruženje i stvara odgovarajuću datoteku koja je tamo navedena.

Uobičajene poteškoće i praktična pravila

cron poslovi

95% vremena otklanjam pogreške pri pokretanju bash-a to je zato što cron posao ne radi kako se očekuje.

Ovaj prokleti zadatak radi dobro kada ga pokrenem u naredbenom retku, ali ne uspijeva kada ga pokrenem u crontabu.

Ovdje dva razloga:

  • Cron poslovi nisu interaktivni.
  • Za razliku od skripti naredbenog retka, cron poslovi ne nasljeđuju okruženje ljuske.

Obično nećete primijetiti niti mariti za to što skripta ljuske nije interaktivna jer okruženje nasljeđuje interaktivnu ljusku. To znači da sve PATH и alias konfiguriran kako biste očekivali.

Zbog toga je često potrebno postaviti specifičan PATH za cron zadatak kao što je ovdje:

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

Skripte se međusobno dozivaju

Drugi uobičajeni problem je kada su skripte pogrešno konfigurirane da pozivaju jedna drugu. Na primjer, /etc/profile odnosi se na ~/.bashrc.

To se obično događa kada je netko pokušao popraviti neku grešku i činilo se da sve radi. Nažalost, kada trebate razdvojiti te različite vrste sesija, javljaju se novi problemi.

Docker slika u sandboxu

Kako bih eksperimentirao s pokretanjem ljuske, napravio sam Docker sliku koja se može koristiti za otklanjanje pogrešaka pri pokretanju ljuske u sigurnom okruženju.

Pokreni:

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

Dockerfile se nalazi здесь.

Za prisilnu prijavu i simulaciju ljuske za prijavu:

$ bash --login

Za testiranje skupa varijabli BASH_ENV:

$ env | grep BASH_ENV

Za otklanjanje pogrešaka crontab jednostavna skripta će se izvršavati svake minute (u /root/ascript):

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

Izvor: www.habr.com

Dodajte komentar