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 perii PS1 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 on tty -s tai test -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?

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *