[bash] source ~/.bash_profile

Questions et astuces concernant l'installation et la configuration d'archlinux
Jeddo
Hankyu
Messages : 20
Inscription : sam. 30 juin 2007, 18:13
Localisation : France

[bash] source ~/.bash_profile

Message par Jeddo »

Bonjour à tous,

Mon problème est relativement simple à expliquer : je suis obligé de faire un

Code : Tout sélectionner

$ source ~/.bash_profile
manuellement afin que mon environnement bash personnel soit pris en compte. Ce n'est pas normal.

J'utilise le terminal de xfce mais j'observe le même comportement avec n'importe quelle console. J'en déduis qu'il y a un problème avec la configuration de bash mais j'ignore où il se situe précisément.

Merci de m'aider.

Mon ~/.bash_profile :

Code : Tout sélectionner

# .bash_profile

# Initialize keychain if needed
if [ -r $HOME/.ssh/identity -o -r $HOME/.ssh/id_dsa -o -r $HOME/.ssh/id_rsa ]; then
        if [ ! -d $HOME/.keychain ]; then
                keychain
        fi
fi

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

export CVS_RSH=ssh

GODI=$HOME/opt/godi
PATH=$PATH:/usr/local/bin:$HOME/bin:$GODI/bin:$GODI/sbin

export PATH
unset USERNAME
Mon ~/.bashrc :

Code : Tout sélectionner

# .bashrc

# User specific aliases and functions

PS1='[\u@\h \W]\$ '
alias ls='ls --color=auto'
alias ll='ls -l'
alias la='ls -a'

alias mycvs='cvs -d :ext:toto.fr:/path/to/cvs'

export MYSVN="svn+ssh://jeddo@toto.fr/path/to/svn"
export SVN_EDITOR=vi

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
À noter que le ~/.bashrc est correctement chargé lors du lancement de la console :

Code : Tout sélectionner

$ echo $MYSVN
svn+ssh://jeddo@toto.fr/path/to/svn
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17569
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [bash] source ~/.bash_profile

Message par benjarobin »

C'est très bizarre tous tes fichiers, pour l'instant je te conseil de lire le man....

Code : Tout sélectionner

Lorsque bash est lancé comme shell de connexion interactif, ou comme shell non-interactif avec l'option --login, il lit et exécute  tout  d'abord les  commandes se trouvant dans le fichier /etc/profile s'il existe. Après lecture de ce fichier, il recherche ~/.bash_profile, ~/.bash_login, et ~/.profile, dans cet ordre, et exécute les commandes se trouvant dans le premier fichier existant et accessible en lecture. L'option  --noprofile peut être utilisée au démarrage du shell pour empêcher ce comportement.

Lorsqu'un shell de connexion se termine, bash lit et exécute les commandes du fichier ~/.bash_logout, s'il existe.

Quand  un  shell interactif démarre sans être un shell de connexion, bash lit et exécute les commandes se trouvant dans ~/.bashrc s'il existe. Ce comportement peut être inhibé à l'aide de l'option --norc. L'option --rcfile fichier forcera bash à exécuter les commandes  dans  fichier  plutôt que dans ~/.bashrc.

Quand  bash  est  démarré  de  manière  non-interactive,  pour  lancer  un  script  shell  par  exemple,  il  recherche la variable BASH_ENV dans l'environnement, développe son contenu si elle existe, et considère cette valeur comme le nom d'un fichier à lire et exécuter. Bash  se  comporte comme si la commande suivante se trouvait en début de script : 
	if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
mais la valeur de la variable PATH n'est pas utilisée pour rechercher le fichier.
	
Si  bash  est invoqué sous le nom sh, il essaye d'imiter le comportement de démarrage des versions historiques de sh autant que possible, tout en restant conforme aux spécifications POSIX. Lorsqu'il est invoqué comme shell de connexion interactif (ou non-interactif avec  l'option  --login), il  essaye d'abord d'exécuter les commandes se trouvant dans /etc/profile et ~/.profile, dans cet ordre. L'option --noprofile peut toujours être utilisée pour désactiver ce comportement. Quand il est invoqué en tant que shell interactif sous le  nom  sh,  bash  consulte  la  variable  ENV, développe  sa valeur si elle est définie et utilise le résultat en tant que nom de fichier à lire et exécuter. Comme un shell invoqué sous le nom sh n'essaye pas d'exécuter  d'autre fichier de démarrage, l'option --rcfile n'a aucun effet. Un shell non interactif invoqué sous le nom sh ne lit aucun autre fichier d'initialisation. Quand il est invoqué sous le nom sh, bash entre en mode posix après avoir lu les fichiers d'initialisation.

Quand  bash  est  invoqué  en  mode posix, avec l'option --posix sur la ligne de commande, il suit ce standard en ce qui concerne les fichiers de démarrage. Dans ce cas, la variable ENV  est  développée,  et  le  fichier  qui  en  résulte  est  exécuté.  On  n'exécute  pas  d'autre  fichier d'initialisation.

Bash  tente  de déterminer s'il est exécuté par le démon lançant les shells distants (généralement appelé rshd). Si bash se rend compte qu'il est exécuté par rshd, il lit et exécute les commandes de ~/.bashrc si ce fichier existe et est lisible. Il n'a  pas  ce  comportement  lorsqu'il  est invoqué  sous  le  nom  sh. L'option --norc peut être utilisé pour interdire ce comportement, et l'option --rcfile permet de forcer l'utilisation d'un autre fichier, mais rshd n'utilise généralement pas ces options et ne permet pas non plus leur utilisation.
~/.bashrc nettoyé

Code : Tout sélectionner

# Check for an interactive session
[ -z "$PS1" ] && return           

# Voir le man de bash, mettre --login pour charger le profile...

eval `dircolors -b`

PS1='\[\e[0;32m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[m\]\[\e[1;32m\]\$ \[\e[m\]'
# Voir le man de bash, mettre --login pour charger le profile...

.bash_profile

Code : Tout sélectionner

. $HOME/.bashrc
/etc/profile nettoyé

Code : Tout sélectionner

#                                                       
#Determine our shell without using $SHELL, which may lie
shell="sh"                                              
if test -f /proc/mounts; then                           
   case $(/bin/ls -l /proc/$$/exe) in                   
        *bash) shell=bash ;;                            
        *dash) shell=dash ;;                            
        *ash)  shell=ash ;;                             
        *ksh)  shell=ksh ;;                             
        *zsh)  shell=zsh ;;                             
    esac                                                
fi                                                      

#echo "On charge /etc/profile  shell : .$shell" #Pour debugger

# Load shell specific profile settings
test -f "/etc/profile.$shell" &&  . "/etc/profile.$shell"

#Set our umask
umask 022     

# Set our default path
PATH="/bin:/usr/bin:/sbin:/usr/sbin"
export PATH

INPUTRC="/etc/inputrc"
LESS="-R"
LC_COLLATE="C"

export HISTSIZE HISTCONTROL INPUTRC LESS LC_COLLATE

# Load profiles from /etc/profile.d
if test -d /etc/profile.d/; then
    for profile in /etc/profile.d/*.sh; do
        test -x $profile && . $profile
    done
    unset profile
fi

# Termcap is outdated, old, and crusty, kill it.
unset TERMCAP

# Man is much better than us at figuring this out
unset MANPATH
/etc/profile.bash

Code : Tout sélectionner

#
PS1='[\u@\h \W]\$ '
PS2='> '
PS3='> '
PS4='+ '

export PS1 PS2 PS3 PS4

ulimit -Sc 0 #Don't create core files

if test "$TERM" = "xterm" -o \
        "$TERM" = "xterm-color" -o \
        "$TERM" = "xterm-256color" -o \
        "$TERM" = "rxvt" -o \
        "$TERM" = "rxvt-unicode" -o \
        "$TERM" = "xterm-xfree86"; then
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
    export PROMPT_COMMAND
fi
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Répondre