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.
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 bash
Contona:
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
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