GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wird ~/.profile von Bash bezogen?

Ich versuche, eine globale Zählervariable zu erstellen, um zu sehen, wie oft ~/.profile hingerichtet wird. Also:
In ~/.bashrc :

# ... 
if [ "$PROFILE_EXEC_TIMES" = "" ]; then
 export PROFILE_EXEC_TIMES=0
fi
let "PROFILE_EXEC_TIMES += 1"

In ~/.profile :

# ... 
export PROFILE_EXEC_TIMES
let "PROFILE_EXEC_TIMES += 1"

Aber wenn ich eine neue Shell öffne und schreibe echo $PROFILE_EXEC_TIMES , alles, was ich bekomme, ist 1 . $PROFILE_EXEC_TIMES muss mindestens 2 sein. Ich vermute, dass ~/.profile wird nicht von bash bezogen … wenn ja, was muss ich tun, um zu überprüfen, wie oft ~/.profile wird ausgeführt?

Bearbeiten:
Mir ist aufgefallen, dass /etc/gdm/Xsession bezieht ~/.profile durch die folgende Zeile:

test -f "$HOME/.profile" && . "$HOME/.profile"

und ~/.bashrc wird in ~/.profile bezogen durch die folgenden Zeilen:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

Außerdem habe ich die folgende Zeile zu ~/.bashrc hinzugefügt &~/.profile :

echo $(cd ${0%/*} && echo $PWD/${0##*/}) >> /home/myUserName/a

und konnte sehen, dass der Datei nur eine Zeile hinzugefügt wurde, nachdem ich mich bei meinem Benutzer angemeldet hatte.

Ich möchte betonen, dass mein Ziel hier ist:
Herauszufinden, wie oft ~/.profile wird ausgeführt, wenn sich der Benutzer anmeldet.

Zusätzliche Details:

$ uname -a
Linux my-desktop 2.6.32-25-generic #45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010 x86_64 GNU/Linux
$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04.1 LTS"
  • Meine /etc/gdm/Xsession
  • Meine ~/.bashrc
  • Mein ~/.profil

Akzeptierte Antwort:

Aus Ihren Kommentaren zu meiner ursprünglichen Antwort geht hervor, dass Ihre eigentliche Frage lautet:„Ist ~/.profile von GNOME bezogen?“ Die Antwort ist ja. Schauen Sie in /etc/gdm/Xsession nach :

# First read /etc/profile and .profile
test -f /etc/profile && . /etc/profile
test -f "$HOME/.profile" && . "$HOME/.profile"
# Second read /etc/xprofile and .xprofile for X specific setup
test -f /etc/xprofile && . /etc/xprofile
test -f "$HOME/.xprofile" && . "$HOME/.xprofile"

Originalantwort

Aus der Manpage von bash:

Wenn bash als interaktive Login-Shell oder als
nicht interaktive Shell mit der Option –login
aufgerufen wird, liest es zuerst
Befehle aus der Datei /etc/profile und führt sie aus, falls diese
Datei existiert. Nach dem Lesen dieser Datei
sucht es nach ~/.bash_profile , ~/.bash_login , und ~/.profile , in dieser Reihenfolge, und
liest und führt Befehle aus dem
ersten
aus, der existiert und lesbar ist.

Sie haben also möglicherweise eine Datei namens .bash_profile oder .bash_login in Ihrem Home-Verzeichnis. Wenn eines davon existiert, verwendet Bash es anstelle von .profile.

Verwandte:Wie liest man den Standardschlüsselwert mit dconf oder gsettings?
Ubuntu
  1. Bash-Scripting(I)

  2. Wie schreibe ich ein automatisch bezogenes Shell-Skript in /etc/profile?

  3. Helfen Sie mir, .profile, .bashrc usw. zu verstehen?

  4. Anzeige der Bash-Eingabeaufforderung Hh:mm:ss?

  5. Bash-Exportbefehl

Bash-Case-Statement

Bash if..else-Anweisung

Bash-Arrays

Bash Shebang

Bash-printf-Befehl

Assoziatives Array in Bash