Če ste med iskanjem našli to stran, verjetno poskušate rešiti kakšno težavo z izvajanjem bash.
Morda vaše okolje bash ne nastavlja spremenljivke okolja in ne razumete, zakaj. Morda ste nekaj vtaknili v različne zagonske datoteke ali profile bash ali vse naključne datoteke, dokler ni delovalo.
V vsakem primeru je bistvo te opombe čim bolj preprosta predstavitev postopka za zagon bash, da se boste lahko spopadli s težavami.
Diagram
Ta diagram poteka povzema vse procese pri izvajanju bash.
Zdaj pa si podrobneje oglejmo vsak del.
Prijava Shell?
Najprej morate izbrati, ali ste v prijavni lupini ali ne.
Prijavna lupina je prva lupina, ki jo vnesete, ko se prijavite v interaktivno sejo. Lupina za prijavo ne zahteva uporabniškega imena in gesla. Lupino za prijavo lahko prisilite, da se zažene z dodajanjem zastavice --login
ob klicu bash
, na primer:
bash --prijava
Prijavna lupina nastavi osnovno okolje, ko prvič zaženete lupino bash.
Interaktiven?
Nato določite, ali je lupina interaktivna ali ne.
To je mogoče preveriti s prisotnostjo spremenljivke PS1
(namesti funkcijo vnosa ukazov):
if [ "${PS1-}" ]; nato echo interaktivni else echo neinteraktivni fi
Ali pa preverite, ali je možnost nastavljena -i
, z uporabo posebne spremenljivke vezaj -
v bashu, na primer:
$echo$-
Če je v izhodu simbol i
, potem je lupina interaktivna.
V prijavni lupini?
Če ste v lupini za prijavo, bash poišče datoteko /etc/profile
in teče, če obstaja.
Nato poišče katero koli od teh treh datotek v naslednjem vrstnem redu:
~/.bash_profile ~/.bash_login ~/.profile
Ko enega najde, ga zažene, druge pa preskoči.
V interaktivni lupini?
Če ste v lupini brez prijave, se predpostavlja, da ste že bili v lupini za prijavo, okolje je konfigurirano in bo podedovano.
V tem primeru se po vrstnem redu izvedeta naslednji dve datoteki, če obstajata:
/etc/bash.bashrc ~/.bashrc
Ni možnosti?
Če niste niti v lupini za prijavo niti v interaktivni lupini, bo vaše okolje dejansko prazno. To povzroča veliko zmede (glejte spodaj o opravilih cron).
V tem primeru bash pogleda spremenljivko BASH_ENV
vaše okolje in ustvari tam navedeno ustrezno datoteko.
Pogoste težave in preprosta pravila
cron opravila
95 % časa odpravljam napake pri zagonu bash, ker opravilo cron ne teče po pričakovanjih.
Ta prekleta naloga deluje dobro, ko ga zaženem v ukazni vrstici, vendar ne uspe, ko ga zaženem v crontabu.
Tukaj dva razloga:
- Opravila Cron niso interaktivna.
- Za razliko od skriptov ukazne vrstice opravila cron ne podedujejo lupinskega okolja.
Običajno ne boste opazili ali skrbeli za to, da lupinski skript ni interaktiven, ker okolje podeduje interaktivno lupino. To pomeni, da vse PATH
и alias
konfiguriran, kot bi pričakovali.
Zato je pogosto treba določiti posebno PATH
za opravilo cron, kot je tukaj:
* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram
Skripte, ki se kličejo
Druga pogosta težava je, ko so skripti pomotoma konfigurirani za medsebojno klicanje. na primer /etc/profile
poziva k ~/.bashrc
.
To se običajno zgodi, ko je nekdo poskušal popraviti kakšno napako in se je zdelo, da vse deluje. Na žalost, ko morate ločiti te različne vrste sej, se pojavijo nove težave.
Dockerjeva slika v peskovniku
Za eksperimentiranje z izvajanjem lupine sem ustvaril sliko Docker, ki jo je mogoče uporabiti za odpravljanje napak pri izvajanju lupine v varnem okolju.
Kosilo:
$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash
Dockerfile se nahaja
Za prisilno prijavo in simulacijo lupine za prijavo:
$ bash --login
Za testiranje nabora spremenljivk BASH_ENV
:
$ env | grep BASH_ENV
Za odpravljanje napak crontab
preprost skript bo izveden vsako minuto (v /root/ascript
):
$ crontab -l
$ cat /var/log/script.log
Vir: www.habr.com