Miksi ' ei toimi ~ / .bash_profile-tiedostoni?

Käytän Linux Mintia. Kirjautumistunnukseni (cat /etc/passwd | grep myUserName) on bash.

Kun olen käynnistänyt graafisen työpöytäympäristön ja suorittanut siitä pääteemulaattorin, huomaan, että .bash_profile ei ole peräisin (ympäristömuuttujia, jotka ovat export ed ovat määrittämättömiä). Mutta jos kirjaudun sisään tekstikonsolista ( ctrl + alt + F1 ) tai suoritan manuaalisesti bash -l pääteemulaattorista, .bash_profile toimii hyvin.

Olenko väärässä, kun luulen, että .bash_profile tulee hankkia, kun X käynnistyy, ja kaikkien export ”muunnelmien tulisi olla käytettävissä päätelaitteessa, käynnissä X: stä?

PS Kaikkien sijoittaminen osioon .bashrc ja hankinta kohteesta .bash_profile ei ole hyvä idea ( https://stackoverflow.com/questions/902946/ ): ympäristöasiat tulisi hankkia vain kerran.

Vastaa

Bash lukee tiedoston ~/.bash_profile, kun se on kirjautumiskuori. Tämän saat, kun kirjaudut sisään tekstitilassa.

Kun kirjaudut sisään X: ään, /bin/sh suorittaa käynnistysskriptit. Ubuntu ja Mint, /bin/sh on viiva , ei bash. Viivalla ja bashilla on samat perusominaisuudet, mutta viiva tarttuu nämä ydinominaisuudet ollakseen nopeita ja pieniä, kun taas bash lisää paljon ominaisuuksia kustannuksella vaatia enemmän resursseja. On tavallista käyttää viivaa komentosarjoissa, jotka eivät tarvitse lisäominaisuuksia ja bashia interaktiiviseen käyttöön (vaikka zsh sisältää paljon mukavampia ominaisuuksia ).

Useimmat näyttöyhdistelmät manager (ohjelma, johon kirjoitat käyttäjänimesi ja salasanasi) ja työpöytäympäristö lukevat ~/.profile sisäänkirjautumisskripteistä kohdassa /etc/X11/Xsession, /usr/bin/lightdm-session, /etc/gdm/Xsession tai kumpi soveltuu. Joten laita ympäristömuuttujien määritelmät kohtaan ~/.profile. Varmista, että käytät vain syntaksia, jota viiva tukee.

Joten mitä sinun pitäisi laittaa minne?

  • Hyvä .bash_profile lataa .profile ja lataa .bashrc, jos kuori on vuorovaikutteinen.

    . ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi 
  • Laita kohtaan .profile ympäristömuuttujien määritykset ja muut istunnon asetukset, kuten ulimit.

  • Laita kohtaan .bashrc bash-vuorovaikutteiset asetukset, kuten aliakset, toiminnot, täydennys, näppäinsidokset (joita ei ole t .inputrc),…

Katso myös Ero sisäänkirjautumisen ja ei-kirjautumisen kuoren välillä? ja Vaihtoehto .bashrc: lle .

Kommentit

  • monia asioita on opittu yhdestä vastauksesta: )
  • jopa .profile ei toimi ' t Debian 10: ssä " Buster ", vain .bashrc wor ks

Vastaus

.bash_profile on lyödä. Ei ole olemassa standardia, joka valtuuttaisi X: n hankkimaan .bash_profile.

Ajattelet pikemminkin .profile. Alun perin se oli bourne-kuoren (sh) käynnistysasetustiedosto. Nykyään monien jakelujen työpöytäympäristö on määritetty lähteeksi .profile. Huomaa, että tämä ei myöskään ole standardi, mutta se näyttää olevan käytäntö.

Debian käytti lähdettä .profile graafisella sisäänkirjautumisella ( wiki-sivu vuodesta 2013 ) nyt se ei” t ( wiki-sivu vuodesta 2016 ).

Arch-lähteet .xprofile graafisella sisäänkirjautumisella ( wiki-sivu vuodesta 2013 ).

Ubuntu käytti aikanaan lannistamaan .profile ( wiki -sivua vuodesta 2013 ), nyt se ei enää lannista ( wiki -sivu vuodesta 2016 ).


Mitä tulee toiseen kysymykseesi: Miksi ~ / .bash_profile ei toimi? odotettu käyttäytyminen.

Lyhyesti sanottuna käyttäytyminen on seuraava:

  • bash aloitettiin interaktiivisena kirjautumissuojana: lukee ~/.profile
  • bash alkoi vuorovaikutteisena ei-kirjautumiskoodina: lukee ~/.bashrc

Lisätietoja on vastauksessani samanlainen ar kysymys askubuntu: https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc/132319#132319

kommentit

  • Osa tästä on oikein, mutta” lue aina ~/.bashrc ”on huono neuvo: sinun tulisi lukea vain .bashrc interaktiivisesta kuoresta .' Olet menettänyt ydinongelman tässä, että kun kirjaudutaan sisään X: ään, ei ole bash-kirjautumisilmentymää (useimmissa näytönhallinta- / työpöytäympäristöyhdistelmissä, mukaan lukien ilmeisesti AntonioK ' s).
  • Kiitos palautteestasi. Toivon, että päivitin vastaukseni riittävän hyvin valitusten ratkaisemiseksi. Mitä tulee neuvonii " lukemaan aina .bashrc ", tarkoitin aina vuorovaikutteista kuorta . Olen selventänyt sitä osaa. Toivon, että se ei ole enää harhaanjohtava.
  • " Ubuntu erityisesti estää .profile ( linkki ) " Wiki suositteli kerran (järjetöntä) sitä; että ' on korjattu. (Huomautus /etc/profile ei ole suositeltavaa järjestelmäkohtaisissa tehtävissä, mieluummin lisäämällä komentosarjoja /etc/profile.d.) Käyttäjäkohtainen .profile -tiedostot ovat nyt yksi suositelluista tavoista asettaa käyttäjäkohtaisia ympäristömuuttujia: " Sopivat tiedostot ympäristömuuttujien asetuksiin, joiden tulisi vaikuttaa vain tiettyyn käyttäjään ( eivätkä koko järjestelmä) ovat ~ / .pam_environment ja ~ / .profile . "
  • Linkitetty sivu Debianista määrittää, että Debian ei lue ~/.profile graafista kirjautumista varten ja ~/.xsessionrc pitäisi olla käytetään sen sijaan.
  • kiitos huomaamastasi. wiki-sivu päivitettiin. linkin versioihin sellaisina kuin ne olivat vastauksen aikaan.

vastaus

Pari ongelmaa syntyy, kun yritetään ladata / source ~ / .profile-tiedosto uudelleen. [Tämä viittaa Ubuntu linuxiin – joissakin tapauksissa komentojen yksityiskohdat ovat erilaiset]

  1. Käytätkö tätä suoraan terminaalissa vai komentosarjassa?
  2. Kuinka suoritat tämän komentosarjassa?

Mainos. 1)

Tämän suorittaminen suoraan terminaalissa tarkoittaa, että alikuorta ei luoda. Joten voit käyttää joko kahta komentoa:

source ~/.bash_profile 

tai

. ~/.bash_profile 

Molemmissa tapauksissa tämä päivittää ympäristön .profile-tiedoston sisällöllä.

Ad 2) Voit aloittaa minkä tahansa bash-komentosarjan joko soittamalla

sh myscript.sh 

tai

. myscript.sh 

Ensimmäisessä tapauksessa tämä luo alikuoren, joka ei vaikuta järjestelmäsi ja ne näkyvät vain alikuoriprosessille. Subhell-komennon lopettamisen jälkeen mitään vientiä jne. Ei käytetä. TÄMÄ on yleinen virhe ja aiheuttaa paljon kehittäjiä menettämään paljon aikaa.

Jotta komentosarjassa tehdyt muutokset vaikuttavat globaali ympäristö, jonka komentosarja on suoritettava

.myscript.sh 

-komennolla.

Varmistaaksesi, että komentosarjaa ei suoriteta sisään voit käyttää tätä toimintoa. (Jälleen esimerkki koskee Ubuntu-kuorta)

#/bin/bash preventSubshell(){ if [[ $_ != $0 ]] then echo "Script is being sourced" else echo "Script is a subshell - please run the script by invoking . script.sh command"; exit 1; fi } 

Toivon, että tämä poistaa joitain yleisiä väärinkäsityksiä! : D Onnea!

Vastaa

Kysymyksessäsi viitat https://stackoverflow.com/questions/902946/ suositukseksi olla lähettämättä, kun hyväksytty vastaus määrää

  • Laita PATH-asetukseni .profile-tiedostoon (koska käytän joskus muita kuoria)
  • Laita Bash-aliakseni ja -funktioni omaan. bashrc-tiedosto
  • Käytä sitten tätä [MUOKATTU: koodinpätkä-kommentit]:

    .bash_profile:

    #!/bin/bash # echo "Loading ${HOME}/.bash_profile" source ~/.profile # Get the paths source ~/.bashrc # get aliases 

Laittamalla kaikki kohtaan .profile ei toimi minulle Linux Mintissa. .bashrc -toiminnon käyttö toimi hyvin.

Vastaus

Yksinkertainen ratkaisu on pääte kirjautumispäätteen. Gnome-päätelaitteessa oletusprofiilin kohdassa ”Laatta ja komento” voit valita valintaruudun ”Suorita komento kirjautumiskuorena”. Tämä artikkeli selittää kirjautumistunnuksen ja ei-välisen eron.

Vastaa

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