Käytin vain paljon aikaa kirjautumis- ja interaktiivisten kuorien lukemiseen ja siihen, miksi ympäristöä pitäisi asettaa tai ei pitäisi asettaa muuttujat, kuoritoiminnot jne. eri profiili- ja bashrc-tiedostoissa. tässä viestissä mainittiin, että erityiset asiat, kuten pikavaihtoehdot, tulisi asettaa ~ / .bashrc-tiedostoon. Se sai minut miettimään PS1-muuttujaa. Kaikissa näkemissäni esimerkeissä heillä on jotain export PS1=""
. Pitäisikö tämä todella viedä ympäristöön, koska sillä on merkitystä vain bashille? Onko sinulla vain tuottaa minulle tarkoitetun vaikutuksen, mutta mietin, puuttuuko minusta jotain.
Vastaa
Se on oikein: PS1
on merkityksellinen vain interaktiivisissa bashin esiintymissä, joten se tulisi asettaa kohtaan ~/.bashrc
eikä sitä pitäisi viedä. PS1
on merkityksellinen myös muissa kuorissa, mutta sillä on erilainen merkitys, koska pikalaajennukset eroavat kuorien välillä. Itse asiassa, jopa bash-esiintymien välillä, PS1
voi olla erilainen merkitys, koska merkitys riippuu kuorivaihtoehdoista (ainakin promptvars
).
PS1
vienti ympäristöön .profile
on takaisku 1970-luvulle, jolloin vain yksi kuori oli käytti sitä (Bourne-kuorta) ja sillä ei ollut määritystiedostoa. Se toimii edelleen tänään, jos käytät aina samaa kuorta et koskaan määritä sitä eri tavalla. Mutta kaikki modernit kuoret, joita ei ole suunniteltu puhtaasti komentosarjoja varten (csh, ksh , bash, zsh,…) luki asetustiedosto, kun se aloitettiin vuorovaikutteisesti (.cshrc
, .kshrc
, .bashrc
, .zshrc
,…), joten 1970-luvun menetelmä ei ole enää tarpeen. PS1
-asetusten ja muiden komentotulkkikohtaisten asetusten asettaminen komentotulkkikohtaisissa tiedostoissa ja viemättä niitä ympäristöön välttää rikkomasta asioita, kun käytät eri kuoren kokoonpanoa tai eri kuorta tai erilainen päätelaite, joka ei pysty näyttämään tavallista nopeaa mielikuvitustasi. PS1
-asetuksen asettaminen komentotulkkikohtaisessa tiedostossa toimii koko ajan, kun taas sen asettaminen .profile
ja sen vienti toimii vain ”yksinkertaisissa” tapauksissa, joten ei ole syytä olla tekemättä sitä oikealla tavalla, mutta verkossa on paljon huonoja opetusohjelmia ja jopa jakelujen virheellisiä oletusasetuksia. C ”est la vie .
Kommentit
- Miten
PS1
mistä.profile
toimii ei-sisäänkirjautuville bash-kuoreille, koska ne eivät ' lähde sitä? Sanotko, että tämä toimisi, koska ei sisäänkirjautumisen kuori haarautuu sisäänkirjautumisen kuoresta, joten se periiPS1
ympäristön kautta? - @MikeSweeney kyllä, että ' s miksi ' s vietiin .
- Yksi tapa, jolla väärä ajatus leviää PS1: n viennistä, on nähdä
if [ -n "$PS1" ] ; then proceed assuming an INTERACTIVE shell ; fi
– joka esiintyy yleisesti ihmisten ' s .bashrc-tiedostoissa vain komentojen täydentämisen kaltaisten asioiden lataamiseen, jos tämä on käyttäjä ' s vuorovaikutteinen päätelaite. Joten, kun nähdään sen toimivan siellä, sama logiikka sulkeutuu kuoren komentosarjoihin, joten " need " viedä se. Sen sijaan meidän pitäisi kirjautua sisään teraktiiviset / päätelaitteet, joilla ontty -s
taitest -t 0
. - @DouglasDD Todellakin.
PS1
-testi on ollut esimerkiksi Debianissa ' s/etc/profile
iän ajan. En tiedä ' en tiedä missä tämä huono käytäntö syntyi. Epäilen, että se tuli yhdestä tietystä käyttötapauksesta (ehkä havaita rlogin- tai ssh-kirjautumiset?), Jossa se sattui toimimaan. Valitettavasti se epäonnistuu monissa muissa tapauksissa, joten monet aiheeseen liittyvät kysymykset täällä ja muualla. - @Gilles emmekä saa viedä
CLICOLOR
ja ? @DouglasDD tarkoittaako tämä sitä, ettäif [[-z $p1]];then return fi
-tarkistus.bashrc
-palvelussa on virheellinen?