Bashin käyttäminen yksityiskohtaisesti

Jos löysit tämän sivun haulla, yrität todennäköisesti ratkaista jotakin bashin suorittamiseen liittyvää ongelmaa.

Ehkä bash-ympäristösi ei aseta ympäristömuuttujaa, etkä ymmärrä miksi. Olet ehkä juuttunut johonkin useisiin bash-käynnistystiedostoihin tai -profiileihin tai kaikkiin tiedostoihin satunnaisesti, kunnes se toimi.

Joka tapauksessa tämän huomautuksen tarkoitus on laatia bashin käynnistämismenettely mahdollisimman yksinkertaisesti, jotta voit käsitellä ongelmia.

Диаграмма

Tämä vuokaavio esittää yhteenvedon kaikista prosesseista bashia suoritettaessa.

Bashin käyttäminen yksityiskohtaisesti

Katsotaanpa nyt jokaista osaa tarkemmin.

Kirjaudu Shelliin?

Ensin sinun on valittava, oletko kirjautumiskuoressa vai et.

Kirjautumiskuori on ensimmäinen komentotulkki, jonka syötät kirjautuessasi sisään interaktiiviseen istuntoon. Kirjautumiskuori ei vaadi käyttäjätunnusta ja salasanaa. Voit pakottaa kirjautumiskuoren käynnistymään lisäämällä lipun --login kun soitetaan bash, esimerkiksi:

bash -- kirjaudu sisään

Kirjautumiskuori määrittää perusympäristön, kun käynnistät bash-kuoren ensimmäisen kerran.

Interaktiivinen?

Sitten määrität, onko kuori interaktiivinen vai ei.

Tämä voidaan tarkistaa muuttujan läsnäololla PS1 (se asentaa komentosyöttötoiminnon):

jos [ "${PS1-}" ]; sitten kaiku interaktiivinen muu echo ei-interaktiivinen fi

Tai katso, onko vaihtoehto asetettu -i, käyttämällä erityistä tavuviivamuuttujaa - bashissa esimerkiksi:

$echo$-

Jos tulosteessa on symboli i, sitten kuori on interaktiivinen.

Kirjautumiskuoressa?

Jos olet kirjautumiskuoressa, bash etsii tiedostoa /etc/profile ja toimii jos sellainen on olemassa.

Etsii sitten mitä tahansa näistä kolmesta tiedostosta seuraavassa järjestyksessä:

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

Kun se löytää yhden, se käynnistää sen ja ohittaa muut.

Interaktiivisessa kuoressa?

Jos olet ei-kirjautumiskuoressa, oletetaan, että olet jo ollut sisäänkirjautumiskuoressa, ympäristö on määritetty ja se peritään.

Tässä tapauksessa seuraavat kaksi tiedostoa suoritetaan järjestyksessä, jos ne ovat olemassa:

/etc/bash.bashrc ~/.bashrc

Ei vaihtoehtoa?

Jos et ole kirjautumiskuoressa tai interaktiivisessa kuoressa, ympäristösi on todellakin tyhjä. Tämä aiheuttaa paljon sekaannusta (katso alla cron-töistä).

Tässä tapauksessa bash tarkastelee muuttujaa BASH_ENV ympäristöösi ja luo siellä määritetyn vastaavan tiedoston.

Yleiset vaikeudet ja nyrkkisäännöt

cronin työt

95 % ajasta debugin bashin käynnistyksen syynä on se, että cron-työ ei toimi odotetulla tavalla.

Tämä helvetin tehtävä toimii hyvin, kun suoritan sen komentorivillä, mutta epäonnistuu, kun suoritan sen crontabissa.

Täällä kaksi syytä:

  • Cron-työt eivät ole interaktiivisia.
  • Toisin kuin komentorivikomentosarjat, cron-työt eivät peri shell-ympäristöä.

Tyypillisesti et huomaa tai välitä siitä, että komentotulkkikomentosarja ei ole vuorovaikutteinen, koska ympäristö perii interaktiivisesta komentotulkista. Tämä tarkoittaa, että kaikki PATH и alias määritetty odotetusti.

Tästä syystä on usein tarpeen asettaa tietty PATH cron-tehtävään, kuten täällä:

* * * * * PATH=${POLKU}:/polku/oma/ohjelma/kansio omaohjelma

Skriptit kutsuvat toisiaan

Toinen yleinen ongelma on, kun komentosarjat on virheellisesti määritetty kutsumaan toisiaan. Esimerkiksi, /etc/profile vetoaa ~/.bashrc.

Tämä tapahtuu yleensä, kun joku yritti korjata jonkin virheen ja kaikki näytti toimivan. Valitettavasti, kun sinun on erotettava nämä erityyppiset istunnot, syntyy uusia ongelmia.

Sandboxed Docker -kuva

Kokeillakseni komentotulkin suorittamista loin Docker-kuvan, jota voidaan käyttää komentotulkin suorittamiseen suojatussa ympäristössä.

Tuoda markkinoille:

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

Dockerfile sijaitsee täällä.

Voit pakottaa kirjautumisen ja simuloida kirjautumiskuoren:

$ bash --login

Testaaksesi joukko muuttujia BASH_ENV:

$ env | grep BASH_ENV

Virheenkorjausta varten crontab yksinkertainen komentosarja suoritetaan joka minuutti (in /root/ascript):

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

Lähde: will.com

Lisää kommentti