Ger we ev rûpel di lêgerînekê de dît, dibe ku hûn hewl didin ku bi xebitandina bash re pirsgirêkek çareser bikin.
Dibe ku hawîrdora weya bash guhêrbarek jîngehê saz nake û hûn çima fam nakin. Dibe ku we tiştek di pelên cûda yên bash boot an profîlan de an jî hemî pelan bi rengek bêserûber de asê kiriye heya ku ew bixebite.
Di her rewşê de, xala vê notê ev e ku hûn prosedurê ji bo destpêkirina bash bi qasî ku pêkan hêsan bikin destnîşan bikin da ku hûn bi pirsgirêkan re mijûl bibin.
Dîyagram
Ev herikîn hemî pêvajoyên dema ku bash dimeşîne kurt dike.
Naha em ji nêz ve li her beşê binêrin.
Têkeve Shell?
Pêşî hûn hewce ne ku hilbijêrin ka hûn di şêlê têketinê de ne an na.
Dema ku hûn ji bo danişînek înteraktîf têkevin, şêlê têketinê yekem şêlê ye ku hûn têkevinê. Têketinê navê bikarhêner û şîfreyê hewce nake. Hûn dikarin şêlê têketinê bi zorê bidin destpêkirin ku bi lêzêdekirina alekê dest pê bike --login
dema gazî kirin bash
, wek nimûne:
bash - têketin
Dema ku hûn yekem dest bi şêlê bash dikin, şêlê têketinê hawîrdora bingehîn saz dike.
Bihevra?
Dûv re hûn diyar dikin ka şêl înteraktîf e an na.
Ev dikare bi hebûna guhêrbar ve were kontrol kirin PS1
(ew fonksiyona têketina fermanê saz dike):
heke [ "${PS1-}" ]; paşê echo înteraktîf din echo ne-înteraktîf fi
An jî bibînin ka vebijêrk hatiye danîn -i
, bi kar guhêrbareke taybet -
di bash de, wek nimûne:
$echo$-
Ger di deranê de sembolek hebe i
, hingê şêlê înteraktîf e.
Di şêlê têketinê de?
Heke hûn di şêlê têketinê de ne, wê hingê bash li pelê digere /etc/profile
û ger hebe diherike.
Dûv re bi rêza jêrîn li yek ji van sê pelan digere:
~/.bash_profile ~/.bash_login ~/.profile
Dema ku yekî dibîne dest pê dike û yên din diavêje.
Di şêlê înteraktîf de?
Ger hûn di şêlekek ne-têketinê de bin, tê texmîn kirin ku hûn berê di şêlek têketinê de bûn, hawîrdor hatî mîras kirin û dê were mîras kirin.
Di vê rewşê de, du pelên jêrîn heke hebin bi rêz têne darve kirin:
/etc/bash.bashrc ~/.bashrc
Vebijêrk tune?
Ger hûn ne di nav şêlek têketinê an jî şêlekek înteraktîf de ne, wê hingê jîngeha we dê bi rastî vala be. Ev dibe sedema gelek tevliheviyê (li jêr li ser karên cron binêre).
Di vê rewşê de bash li guherbarê dinêre BASH_ENV
hawîrdora we û pelê têkildar ku li wir hatî destnîşan kirin diafirîne.
Zehmetiyên Hevbeş û Rêgezên Thumb
karên cron
95% ji dema ku ez destpêka bash debug dikim ev e ku ji ber ku karê cron wekî ku tê hêvî kirin nameşe.
Ev karê lanet Gava ku ez wê li ser rêzika fermanê dimeşîne baş dixebite, lê gava ku ez wê di crontab-ê de dimeşînim têk diçe.
Ev e du sedem:
- Karên Cron ne înteraktîf in.
- Berevajî skrîptên rêza fermanê, karên kronê hawîrdora şêlê mîras nakin.
Bi gelemperî hûn ê ferq nekin an jî bala xwe nedin ku skrîptek şêl ne înteraktîf e ji ber ku jîngeh ji şêlê înteraktîf mîras digire. Ev tê wê wateyê ku her tişt PATH
и alias
wek ku hûn li bendê ne hatine mîheng kirin.
Ji ber vê yekê pir caran hewce ye ku meriv taybetmendiyek diyar bike PATH
ji bo karekî kronî mîna vir:
* * * * * PATH=${PATH}:/rê/ber/min/bername/peldanka bernameya min
Skrîptên gazî hev dikin
Pirsgirêkek din a hevpar ev e ku gava nivîsar bi xeletî têne mîheng kirin ku gazî hev bikin. Bo nimûne, /etc/profile
behsa ~/.bashrc
.
Ev bi gelemperî diqewime dema ku kesek hewl da ku hin xeletiyek rast bike û her tişt xuya bû ku kar dike. Mixabin, gava ku hûn hewce ne ku van celebên danişînan ji hev veqetînin, pirsgirêkên nû derdikevin.
Wêneyê Sandboxed Docker
Ji bo ceribandina xebitandina şêlekê, min wêneyek Docker afirand ku dikare were bikar anîn da ku şêlek di jîngehek ewledar de xelet bike.
Destpêkirin:
$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash
Dockerfile heye
Ji bo têketinê bi zorê û simulasyona şêlek têketinê:
$ bash --login
Ji bo ceribandina komek guherbaran BASH_ENV
:
$ env | grep BASH_ENV
Ji bo debugging crontab
skrîptek hêsan dê her hûrdem were darve kirin (di /root/ascript
):
$ crontab -l
$ cat /var/log/script.log
Source: www.habr.com