GNU/Linux >> Linux Esercitazione >  >> Ubuntu

~/.profile è originato da Bash?

Sto cercando di creare una variabile contatore globale per vedere quante volte ~/.profile viene giustiziato. Quindi:
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"

Ma quando apro una nuova shell e scrivo echo $PROFILE_EXEC_TIMES , tutto quello che ottengo è 1 . $PROFILE_EXEC_TIMES deve essere almeno 2. Sospetto che ~/.profile non proviene da bash... se sì, cosa devo fare per controllare quante volte ~/.profile viene eseguito?

Modifica:
Ho notato che /etc/gdm/Xsession sta cercando ~/.profile dalla seguente riga:

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

e ~/.bashrc proviene da ~/.profile dalle seguenti righe:

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

Inoltre, ho aggiunto la seguente riga a ~/.bashrc &~/.profile :

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

e ho potuto vedere che solo una riga è stata aggiunta al file dopo aver effettuato l'accesso al mio utente.

Voglio sottolineare che il mio obiettivo qui è:
Scoprire quante volte ~/.profile viene eseguito quando l'utente effettua l'accesso.

Dettagli aggiuntivi:

$ 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"
  • Il mio /etc/gdm/Xsession
  • Il mio ~/.bashrc
  • Il mio ~/.profile

Risposta accettata:

Dai tuoi commenti sulla mia risposta originale, sembra che la tua vera domanda sia "~/.profile è originato da GNOME?" La risposta è si. Cerca in /etc/gdm/Xsession :

# 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"

Risposta originale

Dalla manpage di bash:

Quando bash viene invocato come shell di login interattiva, o come shell
non interattiva con l'opzione –login
, prima
legge ed esegue i comandi dal file /etc/profile, se quel file
esiste. Dopo aver letto quel file,
cerca ~/.bash_profile , ~/.bash_login e ~/.profile , in quest'ordine, e
legge ed esegue i comandi dal
primo
che esiste ed è leggibile.

Quindi potresti avere un file chiamato .bash_profile o .bash_login nella tua home directory. Se uno di questi esiste, bash lo utilizzerà al posto di .profile.

Correlati:come leggere il valore della chiave predefinito con dconf o gsettings?
Ubuntu
  1. Script Bash(I)

  2. Aiutami a capire .profile, .bashrc, ecc?

  3. Visualizzazione prompt Bash Hh:mm:ss?

  4. Python rispetto a Bash?

  5. Sincronizzazione del profilo bash tra computer

Dichiarazione del caso Bash

Bash if..else Statement

Matrici Bash

Bash Shebang

Comando Bash printf

Matrice associativa in Bash