Miért nem működik ' az ~ / .bash_profile fájlom?

Linux Mint-et használok. A bejelentkezési héjam (cat /etc/passwd | grep myUserName) bash.

Miután elindítottam a grafikus asztali környezetemet és futtattam belőle egy terminálemulátort, láthatom, hogy a .bash_profile forrás nem származik (környezeti változók, amelyek export ed nincs beállítva). De ha egy szöveges konzolról jelentkezem be ( ctrl + alt + F1 ), vagy manuálisan futtatom bash -l a terminál emulátorból, a .bash_profile jól működik.

Tévedek, ha azt gondolom, hogy .bash_profile -et az X indulásakor kell beszerezni, és az összes export “szerkesztett változatnak elérhetőnek kell lennie a terminálban, X-től futva?

PS Mindent elhelyezni a .bashrc mappában és beszerezni a .bash_profile forrásból nem jó ötlet ( https://stackoverflow.com/questions/902946/ ): a környezeti dolgokat csak egyszer kell beszerezni.

Válasz

A ~/.bash_profile fájlt a bash olvassa be, amikor bejelentkezési héj. Ezt kapja meg, amikor szöveges módban jelentkezik be.

Amikor X alatt jelentkezik be, az indítási parancsfájlokat az /bin/sh hajtja végre. Ubuntu és Mint, /bin/sh kötőjel , nem bash. A Dash és a bash ugyanazok az alapvető jellemzők, de a kötőjel ragaszkodik ezek az alapvető jellemzők annak érdekében, hogy gyorsak és kicsiek legyenek, míg a bash sok funkcióval bővül, több erőforrásigény mellett. Gyakori a kötőjel használata olyan szkriptekhez, amelyeknek nincs szükségük az extra funkciókra és a bash-ra interaktív használatra (bár id = “88136a8899”>

zsh sok szebb funkcióval rendelkezik ).

A kijelző kombinációinak többsége manager (az a program, ahová beírja a felhasználónevét és jelszavát) és az asztali környezet ~/.profile beolvasása a /etc/X11/Xsession, /usr/bin/lightdm-session, /etc/gdm/Xsession vagy amelyik alkalmazható. Tehát tegye a környezeti változó definícióit a ~/.profile helyre. Ügyeljen arra, hogy csak olyan szintaxist használjon, amelyet a kötőjel támogat.

Mit kell tehát hová tenni?

  • .bash_profile betöltődik .profile, és ha a héj interaktív, akkor betöltődik .bashrc.

    . ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi 
  • A .profile mezőbe tegye a környezeti változó definícióit és egyéb munkamenet-beállításokat, például a ulimit.

  • A .bashrc mezőbe tegye a bash interaktív beállításokat, például álneveket, függvényeket, befejezést, kulcs-összerendeléseket (amelyek nem szerepelnek a .inputrc),…

Lásd még: Különbség a bejelentkezési héj és a nem bejelentkező héj között? és A .bashrc alternatívája.

Megjegyzések

  • sok minden megtanult egyetlen válaszból: )
  • még a .profile sem ‘ működik a Debian 10-ben ” Buster “, csak .bashrc wor ks

Válasz

.bash_profile a bash. Nincs szabványos X, amely megadná a .bash_profile forrást.

Amire gondolsz, az inkább .profile. Eredetileg a bourne shell (sh) indítási konfigurációs fájlja volt. Ma sok disztribúciónak az asztali környezete úgy van beállítva, hogy forrást nyerjen .profile. Ne feledje, hogy ez szintén nem szabvány, de úgy tűnik, hogy konvenció.

A Debian a .profile forrást használta grafikus bejelentkezéskor ( wiki oldal 2013-tól ) most nem” t “( wiki oldal 2016-tól ).

Arch források .xprofile grafikus bejelentkezéskor ( wiki oldal 2013-tól ).

Az Ubuntu a .profile ( wiki oldal 2013-tól ) használatával korábban elbátortalanodott, most már nem bátortalanít ( wiki oldal 2016-tól ).


A másik kérdéseddel kapcsolatban: Miért nem működik a ~ / .bash_profile? Ez az várható viselkedés.

Röviden a viselkedés a következő:

  • a bash interaktív bejelentkezési héjként indult: a következőt olvassa: ~/.profile
  • a bash interaktív, nem bejelentkezési shellként indult: a következőt olvassa: ~/.bashrc

További részletekért lásd a válaszomat egy hasonló ar kérdés az askubuntuban: https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc/132319#132319

Megjegyzések

  • Ezek egy része helyes, de a” mindig olvassa el ~/.bashrc ”rossz tanács: csak .bashrc interaktív héjból .’ itt elmulasztotta az alapvető problémát, miszerint az X alatt történő bejelentkezéskor nincs a bash bejelentkezési példánya (a legtöbb kijelzőkezelő / asztali környezet kombináció alatt, beleértve nyilván az AntonioK ‘ s).
  • Köszönjük visszajelzését. Remélem, elég jól frissítettem a válaszomat a panaszok megoldásához. Ami a ” -nek adott tanácsomat illeti, mindig olvassa el a .bashrc ” -t, mindig interaktív héjra gondoltam . Pontosítottam ezt a részt. Remélem, hogy ez már nem félrevezető.
  • Az Ubuntu kifejezetten nem ajánlja az .profile ( link ) ” A wiki egyszer (abszurd módon) elbátortalanította ezt; hogy ‘ kijavításra kerültek. (A (z) /etc/profile megjegyzés továbbra sem kedvelt a rendszerszintű hozzárendeléseknél, inkább a szkriptek hozzáadásához a /etc/profile.d -hez.) Felhasználónként fájlok mostantól a felhasználónkénti környezeti változók beállításának egyik ajánlott módjaként kerülnek bemutatásra: ” Megfelelő fájlok a környezeti változó beállításaihoz, amelyek csak egy adott felhasználót érintenek ( nem pedig a rendszer egésze) a ~ / .pam_environment és a ~ / .profile . ”
  • A Debianról szóló hivatkozott oldal megadja, hogy a Debian nem ~/.profile olvassa el a grafikus bejelentkezéshez, és ~/.xsessionrc helyett.
  • köszönöm, hogy észrevetted. a wiki oldal frissült. úgy linkeltem a verziókat, ahogy azok a válasz idején voltak.

Válasz

Pár kérdés merül fel, amikor megpróbálja újratölteni a / source ~ / .profile fájlt. [Ez az Ubuntu linuxra vonatkozik – egyes esetekben a parancsok részletei eltérőek lesznek]

  1. Ezt közvetlenül a terminálban vagy egy szkriptben futtatja?
  2. Hogyan ezt szkriptben futtatja?

Hirdetés. 1)

Ennek közvetlen futtatása a terminálon azt jelenti, hogy nem jön létre alhéj. Tehát két parancsot használhat:

source ~/.bash_profile 

vagy

. ~/.bash_profile 

Mindkét esetben ez frissíti a környezetet a .profile fájl tartalmával.

Ad 2) Bármely bash parancsfájlt elindíthat a

sh myscript.sh 

vagy

. myscript.sh 

Az első esetben ez létrehoz egy alhéjat, amely nem befolyásolja a környezeti változókat a rendszered, és csak az alhéj folyamat számára lesznek láthatók. Az subshell parancs befejezése után az exportálás stb. Nem lesz alkalmazva. EZ EGY KÖZÖS HIBA, ÉS SOK FEJLESZTŐT SOK IDŐ VESZTESZTÉSÉRE VONATKOZIK.

Annak érdekében, hogy a szkriptben alkalmazott módosításai érvényben legyenek a szkript globális környezetét futtatni kell

.myscript.sh 

paranccsal.

Annak érdekében, hogy a parancsfájl ne fusson be egy alhéj használhatja ezt a funkciót. (Ismét az példa az Ubuntu shellre vonatkozik)

#/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 } 

Remélem, hogy ez kitisztít néhány gyakori félreértést! : D Sok szerencsét!

Válasz

Kérdésében a https://stackoverflow.com/questions/902946/ javasolja, hogy ne forrjon, amikor a az elfogadott válasz előírja a következőt:

  • Helyezze a PATH beállításomat egy .profile fájlba (mert néha más héjakat is használok)
  • Helyezze el a Bash álneveimet és függvényeit az én. bashrc fájl
  • Ezután használja ezt a [SZERKESZTETT: kódrészlet-megjegyzések]:

    .bash_profile:

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

Mindezt a .profile beírta nem működik a Linux Mint-en. A .bashrc használata rendben működött.

Válasz

Az egyszerű megoldás az, hogy terminál egy bejelentkezési terminál. A Gnome terminálnál az alapértelmezett profil “Csempe és parancs” alatt bejelölheti a “Futtatás parancs bejelentkezési héjként” négyzetet. Ez a cikk elmagyarázza a bejelentkezési héj és a nem megfelelő közti különbséget.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük