Yen sampeyan nemokake kaca iki ing telusuran, sampeyan bisa uga nyoba ngrampungake sawetara masalah nalika mlaku bash.
Mungkin lingkungan bash sampeyan ora nyetel variabel lingkungan lan sampeyan ora ngerti sebabe. Sampeyan bisa uga wis macet ing macem-macem file boot bash utawa profil utawa kabeh file kanthi acak nganti bisa.
Ing kasus apa wae, titik cathetan iki yaiku nggawe prosedur kanggo miwiti bash kanthi gampang supaya sampeyan bisa ngatasi masalah.
Diagram
Bagan alur iki ngringkes kabeh proses nalika mlaku bash.
Login Shell?
Pisanan sampeyan kudu milih apa sampeyan ana ing cangkang login utawa ora.
Cangkang login minangka cangkang pisanan sing sampeyan lebokake nalika sampeyan mlebu kanggo sesi interaktif. Cangkang mlebu ora mbutuhake jeneng pangguna lan sandhi. Sampeyan bisa meksa cangkang mlebu kanggo miwiti kanthi nambahake gendera --login
nalika diarani bash
, contone:
bash --login
Cangkang login nyiyapake lingkungan dhasar nalika sampeyan miwiti cangkang bash.
Gawe gathuk ing rembugan?
Banjur sampeyan nemtokake manawa cangkang kasebut interaktif utawa ora.
Iki bisa dicenthang kanthi anané variabel PS1
(nginstal fungsi input perintah):
yen ["${PS1-}"]; banjur kumandhang interaktif liya kumandhang non-interaktif fi
Utawa ndeleng yen pilihan wis disetel -i
, nggunakake variabel hyphen khusus -
ing bash, contone:
$echo$-
Yen ana simbol ing output i
, banjur cangkang interaktif.
Ing shell login?
Yen sampeyan ana ing cangkang login, banjur bash nggoleki file kasebut /etc/profile
lan mlaku yen ana.
Banjur goleki salah siji saka telung file kasebut kanthi urutan ing ngisor iki:
~/.bash_profile ~/.bash_login ~/.profile
Nalika ketemu siji, iku miwiti lan skip liyane.
Ing cangkang interaktif?
Yen sampeyan ana ing cangkang non-login, dianggep sampeyan wis ana ing cangkang login, lingkungan dikonfigurasi lan bakal diwarisake.
Ing kasus iki, rong file ing ngisor iki dieksekusi kanthi urutan, yen ana:
/etc/bash.bashrc ~/.bashrc
Ora ana pilihan?
Yen sampeyan ora ana ing cangkang login utawa cangkang interaktif, mula lingkungan sampeyan pancen bakal kosong. Iki nyebabake akeh kebingungan (ndeleng ngisor babagan proyek cron).
Ing kasus iki bash katon ing variabel BASH_ENV
lingkungan sampeyan lan nggawe file sing cocog sing ditemtokake ing kana.
Kesulitan lan Aturan Umum
lowongan cron
95% wektu aku debug bash wiwitan iku amarga proyek cron ora mlaku kaya samesthine.
tugas sialan iki dianggo nggoleki nalika aku mbukak ing baris printah, nanging gagal nalika aku mbukak ing crontab.
iku loro alasan:
- Proyek Cron ora interaktif.
- Ora kaya skrip baris perintah, proyek cron ora entuk warisan lingkungan cangkang.
Biasane sampeyan ora bakal sok dong mirsani utawa peduli yen skrip cangkang ora interaktif amarga lingkungan kasebut diwenehi warisan saka cangkang interaktif. Iki tegese kabeh PATH
и alias
diatur kaya sing dikarepake.
Iki kok asring perlu kanggo nyetel tartamtu PATH
kanggo tugas cron kaya ing kene:
* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram
Scripts nelpon saben liyane
Masalah umum liyane yaiku nalika skrip salah dikonfigurasi kanggo nelpon saben liyane. Tuladhane, /etc/profile
mréntahaké kanggo ~/.bashrc
.
Iki biasane kedadeyan nalika ana wong sing nyoba ndandani kesalahan lan kabeh katon bisa digunakake. Sayange, nalika sampeyan kudu misahake macem-macem jinis sesi kasebut, masalah anyar muncul.
Gambar Sandboxed Docker
Kanggo eksprimen nganggo cangkang, aku nggawe gambar Docker sing bisa digunakake kanggo debug nganggo cangkang ing lingkungan sing aman.
Bukak:
$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash
Dockerfile dumunung
Kanggo meksa mlebu lan simulasi cangkang mlebu:
$ bash --login
Kanggo nguji set variabel BASH_ENV
:
$ env | grep BASH_ENV
Kanggo debugging crontab
skrip prasaja bakal dieksekusi saben menit (ing /root/ascript
):
$ crontab -l
$ cat /var/log/script.log
Source: www.habr.com