Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Risolto] Duplicazione percorsi in PATH
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
armaoin
Tux's lil' helper
Tux's lil' helper


Joined: 02 Apr 2006
Posts: 110

PostPosted: Thu Feb 16, 2012 8:13 pm    Post subject: [Risolto] Duplicazione percorsi in PATH Reply with quote

Salve,
Avendo alcuni pacchetti e il jdk installati in locale nella mia $HOME avevo la necessità di modificare il mio $PATH con:
Code:
export PATH=$HOME/local/bin:$HOME/local/jdk1.7.0_03/bin:$PATH
in .bashrc.

Questa modifica però fa si che io mi ritrovi con i percorsi $HOME/local/bin e $HOME/local/jdk1.7.0_03/bin ripetuti 2 volte (quando apro un altra shell con urxvt/uxterm/...) quando accedo al sistema dalla console e vado in X con startx.
Per risolvere ho fatto cosi:

.bashrc
Code:
# /etc/skel/.bashrc
#
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output.  So make sure this doesn't display
# anything or bad things will happen !

# Test for an interactive shell.  There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
   # Shell is non-interactive.  Be done now!
   return
fi

# Put your fun stuff here.

. $HOME/.myenv
alias ls="ls --color=auto -F"
alias ll="ls -lh"
alias la="ls -a"
alias lla="ls -lha"
alias rm="rm -i"
alias cp="cp -i"
alias mv="mv -i"


.myenv
Code:
if [[ $MY_ENV != DEFINED ]]; then
   export MY_ENV=DEFINED
   export MANPAGER=/usr/bin/vimmanpager
   export LANG=it_IT.utf8
   export PATH=$HOME/local/bin:$HOME/local/jdk1.7.0_03/bin:$PATH
   export MANPATH=$HOME/local/share/man:$MANPATH
fi


In questo modo evito che le variabili di ambiente customizzate vengano caricate più volte.
Capendone poco di bash ho postato per sapere se quello che ho fatto va bene o dovrei fare in qualche altro modo.


Last edited by armaoin on Fri Feb 17, 2012 3:19 pm; edited 1 time in total
Back to top
View user's profile Send private message
darkmanPPT
Veteran
Veteran


Joined: 13 Apr 2006
Posts: 1069
Location: vi/bo

PostPosted: Fri Feb 17, 2012 1:15 pm    Post subject: Reply with quote

ciao, perdona la domanda, come mai è un problema se si ripetono alcuni path?
cioè, volevo dire, quando esegui un comando non dovrebbe cambiarti niente.
_________________
Darkman
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Fri Feb 17, 2012 2:23 pm    Post subject: Re: Duplicazione percorsi in PATH Reply with quote

armaoin wrote:
[omissis] percorsi $HOME/local/bin e $HOME/local/jdk1.7.0_03/bin ripetuti 2 volte (quando apro un altra shell con urxvt/uxterm/...) quando accedo al sistema dalla console e vado in X con startx.[omissis]
Capendone poco di bash ho postato
ed anche poco di bbcode per non dire di quell'orrido "postato" etc.
Adempiuto l'onere inderogabile dell'imbecillata quotidiana :mrgreen: ti faccio notare che sicuramente, se non usi startx ma un xlogger (xdm/kdm/gdm) il problema non dovrebbe esserci.
Tutta la questione è che ~/.bashrc viene eseguito all'avvio della consolle ma avendo startx già ereditato l'ambiente completo delle aggiunte locali ripete l'aggiunta.
Non mi pare che startx attivi un qualche semaforo per capire quale sia la sessione grafica quindi le soluzioni corrette sono
  • verifica sulle variabili
    ~/.bashrc:
    # .bashrc
    [[ $- != *i* ]] && return
    #interactive shell
    [[ -z "`echo $PATH | grep "$HOME/local/bin"`" ]] && export PATH=$HOME/local/bin:$HOME/local/jdk1.7.0_03/bin:$PATH
    [[ -z "`echo $MANPATH | grep "$HOME/local/share/man"`" ]] && export MANPATH=$HOME/local/share/man:$MANPATH
    export MANPAGER=/usr/bin/vimmanpager
    export LANG=it_IT.utf8
    alias ls="ls --color=auto -F"
    alias ll="ls -lh"
    alias la="ls -a"
    alias lla="ls -lha"
    alias rm="rm -i"
    alias cp="cp -i"
    alias mv="mv -i"
  • usare il ~/.profile che non dovrebbe dare di questi problemi (anzi è al contrario) e non è solo per bash
verifica perché sono a spasso e potrei aver commesso qualche errore ( o posso avercelo messo a bella posta... :twisted: :twisted: :twisted: ) che non posso verificare al momento.
L'esempio canonico fa uso di awk, quello rigoroso usa la sostituzione incorporata e dovrebbe essere da qualche parte in giro, ma ora non mi viene a mente e non mi ricordo come si usa la sostituzione. Quindi arrangiati così.

@darkmanPPT: se dalla shell avvi un programma che fa un chiamata system (quindi avvia un'altra shell) sei già arrivato a tre ripetizioni. Qui siamo su linux, gentoo, non su windozz dove abusare impunemente delle risorse è considerato cosa buona e giusta, nonché tuo dovere e fonte di salvezza (che gli venga un accidente) :wink: Scherzi a parte se fai chiamate ricorsive potrebbe essere un problema.

Quel che non capisco è perché una cosa tanto banale e risaputa (beh... insomma, siamo praticamente nell'archeologia) non sia messa ad esempio di default, semmai.
Forse è il caso di aprire un bug per chidere che gli esempi vengano aggiornati/completati
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
armaoin
Tux's lil' helper
Tux's lil' helper


Joined: 02 Apr 2006
Posts: 110

PostPosted: Fri Feb 17, 2012 3:19 pm    Post subject: Reply with quote

Effettivamente impostare le variabili d'ambiente in ~/.profile (o ~/.bash_profile) risolve tutti i problemi.
Metto la tag risolto.

P.S.
Se decidete di mettere le variabili in ~/.profile fate attenzione perchè se bash trova ~/.bash_profile allora ignora ~/.profile:
man bash:

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads  and  executes commands from  the  file  /etc/profile, if that file exists.  After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.  The --noprofile  option  may be used when the shell is started to inhibit this behavior.
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Fri Feb 17, 2012 5:55 pm    Post subject: Reply with quote

e se vuoi che sia caricato l'ambiente da root devi impostarlo per forza... :evil:
Un giorno o l'altro mi riprometto sempre di investigare ed aprire un bug chiedendo che sia messo ordine ... un giorno ... mai probabilmente.
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum