SlackwareThis Forum is for the discussion of Slackware Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I boot to runlevel 3. When I log in, and echo $ADA_PROJECT_PATH, I get this:
Code:
:/usr/local/lib/gnat
Which is exactly what I should get.
But if I then run startx (I use KDE), and start a Konsole and echo $ADA_PROJECT_PATH again, I get this:
Code:
:/usr/local/lib/gnat:/usr/local/lib/gnat
What the?? Why are there now two paths??
Booting to runlevel 4 changes nothing. As soon as KDE is up and running, I have multiple paths, instead of just the one I'm actually exporting in .bash_profile.
Hopefully this is just some minor thing I'm not doing right, but it's completely eluding me.
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.
When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.
When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.
Try placing your path in '.bashrc'.
You could setup a .bashrc & .bash_profile for your user;
Code:
sample .bash_profile;
~$ cat .bash_profile
# .bash_profile
#08-30-06 12:21
#
# Source .bashrc
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Code:
sample .bashrc;
:~$ cat .bashrc
#.bashrc
#08-30-06 12:20
# Add bin to path
export PATH="$PATH:/sbin:/usr/sbin:$HOME/bin"
#export PATH="$PATH:$HOME/bin"
# Dynamic resizing
shopt -s checkwinsize
# Custom prompt
#PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
#08-29-06 11:40 gws
if [ `id -un` = root ]; then
PS1='\[\033[1;31m\]\h:\w\$\[\033[0m\] '
else
PS1='\[\033[1;32m\]\h:\w\$\[\033[0m\] '
fi
#
# Add color
eval `dircolors -b`
# User defined aliases
alias cls='clear'
alias clls='clear; ls'
alias ll='ls -l'
alias lsa='ls -A'
alias lsg='ls | grep'
alias lsp='ls -1 /var/log/packages/ > package-list'
alias na='nano'
alias web='links -g -download-dir ~/ www.google.com'
#08-29-06 11:50
#To clean up and cover your tracks once you log off
#Depending on your version of BASH, you might have to use
# the other form of this command
trap "rm -f ~$LOGNAME/.bash_history" 0
#The older KSH-style form
# trap 0 rm -f ~$LOGNAME/.bash_history
Well, .bash_profile is executed after you log in to the system - that's when you enter your username and password at the console _and_ when you start your shell in Konsole as a login shell (seems it is so by default - can't check though, I don't use KDE).
So, when you initially log in to the system, .bash_profile sets ADA_PROJECT_PATH to ":/usr/local/lib/gnat". Then you fire up KDE and Konsole executes bash again - but in this case ADA_PROJECT_PATH is already in your environment so it gets expanded and the value is "duplicated".
On the other hand, .bashrc is executed every time the bash is run so moving your ADA_PROJ_PATH routine there will duplicate the variable as well. If it really creates any problems you can try smth like that:
Sorry but the '/etc/profile' will be used if it exists so when you login initially when bash is invoked then the use of ~/.bash_profile, ~/.bash_login, and ~/.profile is read until something that is read and executable then that is executed;
Quote:
excerpt from '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.
When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.
When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.
A user should setup the '.bashrc' whenever the interactive is not a login shell.
That's one of the advantages of using a '~/.bash_profile' that contains conditional tests to execute the '~/.bashrc'.
Well, .bash_profile is executed after you log in to the system - that's when you enter your username and password at the console _and_ when you start your shell in Konsole as a login shell (seems it is so by default - can't check though, I don't use KDE).
So, when you initially log in to the system, .bash_profile sets ADA_PROJECT_PATH to ":/usr/local/lib/gnat". Then you fire up KDE and Konsole executes bash again - but in this case ADA_PROJECT_PATH is already in your environment so it gets expanded and the value is "duplicated".
On the other hand, .bashrc is executed every time the bash is run so moving your ADA_PROJ_PATH routine there will duplicate the variable as well. If it really creates any problems you can try smth like that:
in your .bash_profile. This will set ADA_PROJECT_PATH_SET variable upon initial login and then bash invoked from Konsole will skip the assigment.
This looks like a very neat and tidy way of fixing a somewhat annoying issue. Thank you.
Quote:
Originally Posted by jmacloue
But better way will be to make Konsole invoke bash in regular, not "login shell" mode.
AFAIK that is standard behavior for Konsole. I think you have to explicitly tell it to start as a login shell (the --ls option), if that's what you want.
So the only other thing I can come up with, is that it happens when X and/or KDE is started.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.