Ngajalankeun Bash sacara rinci

Upami anjeun mendakan halaman ieu dina pamilarian, anjeun panginten nyobian ngabéréskeun sababaraha masalah sareng ngajalankeun bash.

Panginten lingkungan bash anjeun henteu netepkeun variabel lingkungan sareng anjeun henteu ngartos kunaon. Anjeun tiasa nyangkut hiji hal dina sababaraha file boot bash atanapi propil atanapi sadaya file sacara acak dugi ka jalan.

Dina sagala hal, titik catetan ieu iklas kaluar prosedur pikeun ngamimitian bash sabisa mungkin ku kituna anjeun bisa nungkulan masalah.

Diagram

Flowchart ieu nyimpulkeun sadaya prosés nalika ngajalankeun bash.

Ngajalankeun Bash sacara rinci

Ayeuna hayu urang nempo leuwih deukeut unggal bagian.

Lebet Shell?

Mimiti anjeun kedah milih naha anjeun aya dina cangkang login atanapi henteu.

Cangkang login mangrupikeun cangkang anu munggaran anjeun lebetkeun nalika anjeun asup pikeun sési interaktif. Cangkang login teu merlukeun ngaran pamaké sarta sandi. Anjeun tiasa maksa cangkang login pikeun ngamimitian ku nambahkeun bandéra --login lamun disebut bashContona:

bash --login

Cangkang login nyetél lingkungan dasar nalika anjeun mimiti ngamimitian cangkang bash.

Interaktif?

Satuluyna anjeun nangtukeun naha cangkang téh interaktif atawa henteu.

Ieu bisa dipariksa ku ayana variabel PS1 (eta installs fungsi input paréntah):

lamun ["${PS1-}"]; tuluy kamandang interaktif lain kamandang fi non-interaktif

Atawa tingali lamun pilihan geus disetel -i, ngagunakeun variabel hyphen husus - dina bash, contona:

$echo$-

Upami aya simbol dina kaluaran i, mangka cangkang téh interaktif.

Dina cangkang login?

Upami anjeun aya dina cangkang login, maka bash milarian filena /etc/profile tur ngajalankeun lamun aya.

Teras milarian salah sahiji tina tilu file ieu dina urutan ieu:

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

Nalika éta mendakan hiji, éta ngamimitian sareng ngaluncat anu sanés.

Dina cangkang interaktif?

Mun anjeun dina cangkang non-login, eta dianggap yén anjeun geus aya dina cangkang login, lingkunganana ngonpigurasi tur bakal diwariskeun.

Dina hal ieu, dua file di handap ieu dieksekusi dina urutan, upami aya:

/etc/bash.bashrc ~/.bashrc

Taya pilihan?

Upami anjeun henteu aya dina cangkang login atanapi cangkang interaktif, maka lingkungan anjeun leres-leres bakal kosong. Ieu nyababkeun seueur kabingungan (tingali di handap ngeunaan padamelan cron).

Dina hal ieu bash kasampak di variabel BASH_ENV lingkungan anjeun sarta nyieun file pakait dieusian.

Kasesahan umum sareng Aturan Jempol

jobs cron

95% waktos kuring debug ngamimitian bash éta kusabab padamelan cron henteu jalan sapertos anu diharapkeun.

tugas sial ieu jalan alus lamun kuring ngajalankeun eta dina garis paréntah, tapi gagal nalika kuring ngajalankeun eta di crontab.

Ieu téh dua alesan:

  • Proyék Cron henteu interaktif.
  • Beda sareng skrip baris paréntah, padamelan cron henteu ngawariskeun lingkungan cangkang.

Ilaharna anjeun moal perhatikeun atanapi paduli yén skrip cangkang henteu interaktif sabab lingkunganana warisan tina cangkang interaktif. Ieu ngandung harti yén sagalana PATH и alias ngonpigurasi sakumaha anjeun nyangka.

Éta pisan sababna naha eta mindeng diperlukeun pikeun nyetél husus PATH pikeun tugas cron sapertos kieu:

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

Skrip saling nelepon

Masalah umum anu sanés nyaéta nalika skrip salah dikonpigurasi pikeun silih nelepon. Salaku conto, /etc/profile nujul kana ~/.bashrc.

Ieu biasana lumangsung nalika batur nyoba ngalereskeun sababaraha kasalahan jeung sagalana seemed jalan. Hanjakalna, nalika anjeun kedah misahkeun jinis sési anu béda-béda ieu, timbul masalah anyar.

Gambar Sandboxed Docker

Pikeun ékspérimén sareng ngajalankeun cangkang, kuring nyiptakeun gambar Docker anu tiasa dianggo pikeun debug ngajalankeun cangkang dina lingkungan anu aman.

peluncuran:

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

Dockerfile ayana di dieu.

Pikeun maksa login sareng simulasi cangkang login:

$ bash --login

Pikeun nguji sakumpulan variabel BASH_ENV:

$ env | grep BASH_ENV

Pikeun debugging crontab naskah basajan bakal dieksekusi unggal menit (di /root/ascript):

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

sumber: www.habr.com

Tambahkeun komentar