LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   I added a PATH to /etc/profile but "echo $PATH" says it's not there? (https://www.linuxquestions.org/questions/linux-newbie-8/i-added-a-path-to-etc-profile-but-echo-%24path-says-its-not-there-4175443320/)

cravengemetzel 12-28-2012 09:34 PM

I added a PATH to /etc/profile but "echo $PATH" says it's not there?
 
I added /usr/games/bin to root's PATH in the /etc/profile file, but it isn't showing up when I run "echo $PATH". I can do PATH=$PATH:/usr/games/bin but this change isn't persistent. It'll undo itself when I open a new terminal.. How do I fix this? Here is my /etc/profile configuration....

Code:

# /etc/profile: login shell setup
#
# That this file is used by any Bourne-shell derivative to setup the
# environment for login shells.
#

# Load environment settings from profile.env, which is created by
# env-update from the files in /etc/env.d
if [ -e /etc/profile.env ] ; then
        . /etc/profile.env
fi

# You should override these in your ~/.bashrc (or equivalent) for per-user
# settings.  For system defaults, you can add a new file in /etc/profile.d/.
export EDITOR=${EDITOR:-/bin/nano}
export PAGER=${PAGER:-/usr/bin/less}

# 077 would be more secure, but 022 is generally quite realistic
umask 022

# Set up PATH depending on whether we're root or a normal user.
# There's no real reason to exclude sbin paths from the normal user,
# but it can make tab-completion easier when they aren't in the
# user's PATH to pollute the executable namespace.
#
# It is intentional in the following line to use || instead of -o.
# This way the evaluation can be short-circuited and calling whoami is
# avoided.
if [ "$EUID" = "0" ] || [ "$USER" = "root" ] ; then
        PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games/bin:${ROOTPATH}"
else
        PATH="/usr/local/bin:/usr/bin:/bin:${PATH}"
fi
export PATH
unset ROOTPATH

if [ -n "${BASH_VERSION}" ] ; then
        # Newer bash ebuilds include /etc/bash/bashrc which will setup PS1
        # including color.  We leave out color here because not all
        # terminals support it.
        if [ -f /etc/bash/bashrc ] ; then
                # Bash login shells run only /etc/profile
                # Bash non-login shells run only /etc/bash/bashrc
                # Since we want to run /etc/bash/bashrc regardless, we source it
                # from here.  It is unfortunate that there is no way to do
                # this *after* the user's .bash_profile runs (without putting
                # it in the user's dot-files), but it shouldn't make any
                # difference.
                . /etc/bash/bashrc
        else
                PS1='\u@\h \w \$ '
        fi
else
        # Setup a bland default prompt.  Since this prompt should be useable
        # on color and non-color terminals, as well as shells that don't
        # understand sequences such as \h, don't put anything special in it.
        PS1="${USER:-$(whoami 2>/dev/null)}@$(uname -n 2>/dev/null) \$ "
fi

for sh in /etc/profile.d/*.sh ; do
        [ -r "$sh" ] && . "$sh"
done
unset sh

If I do "source /etc/profile" all the paths highlited in the /etc/profile (including regular-user paths) are added to root's PATH, but again, as soon as I exit root and become root again, this change is gone.

John VV 12-28-2012 09:46 PM

remove this "${ROOTPATH}" and change it to

The $PATH should not be needed for this one ?? it might depending on other files like bash.bashrc
Code:


PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games/bin:$PATH"

Then reboot

cravengemetzel 12-28-2012 09:58 PM

Quote:

Originally Posted by John VV (Post 4858807)
remove this "${ROOTPATH}" and change it to

The $PATH should not be needed for this one ?? it might depending on other files like bash.bashrc
Code:


PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games/bin:$PATH"

Then reboot

I didn't add "${ROOTPATH}" as it was already there, all I did is squeeze /usr/games/bin before it. I am thus reluctant to remove this in case of breakage? I have no .bashrc in my home directory, nor in my root directory. The only bashrc file is in /etc/bash/bashrc and this one does not have any PATH variables in it. Here:

Code:

# /etc/bash/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

# Bash won't get SIGWINCH if another process is in the foreground.
# Enable checkwinsize so that bash will check the terminal size when
# it regains control.  #65623
# http://cnswww.cns.cwru.edu/~chet/bash/FAQ (E11)
shopt -s checkwinsize

# Enable history appending instead of overwriting.  #139609
shopt -s histappend

# Change the window title of X terminals
case ${TERM} in
        xterm*|rxvt*|Eterm|aterm|kterm|gnome*|interix)
                PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'
                ;;
        screen)
                PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\033\\"'
                ;;
esac

use_color=false

# Set colorful PS1 only on colorful terminals.
# dircolors --print-database uses its own built-in database
# instead of using /etc/DIR_COLORS.  Try to use the external file
# first to take advantage of user additions.  Use internal bash
# globbing instead of external grep binary.
safe_term=${TERM//[^[:alnum:]]/?}  # sanitize TERM
match_lhs=""
[[ -f ~/.dir_colors  ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
[[ -z ${match_lhs}    ]] \
        && type -P dircolors >/dev/null \
        && match_lhs=$(dircolors --print-database)
[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true

if ${use_color} ; then
        # Enable colors for ls, etc.  Prefer ~/.dir_colors #64489
        if type -P dircolors >/dev/null ; then
                if [[ -f ~/.dir_colors ]] ; then
                        eval $(dircolors -b ~/.dir_colors)
                elif [[ -f /etc/DIR_COLORS ]] ; then
                        eval $(dircolors -b /etc/DIR_COLORS)
                fi
        fi

        if [[ ${EUID} == 0 ]] ; then
                PS1='\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
        else
                PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '
        fi

        alias ls='ls --color=auto'
        alias grep='grep --colour=auto'
        alias egrep='egrep --colour=auto'
        alias fgrep='fgrep --colour=auto'
else
        if [[ ${EUID} == 0 ]] ; then
                # show root@ when we don't have colors
                PS1='\u@\h \W \$ '
        else
                PS1='\u@\h \w \$ '
        fi
fi

# Try to keep environment pollution down, EPA loves us.
unset use_color safe_term match_lhs


John VV 12-28-2012 10:19 PM

then add it to the one below
and log in as a normal user
( mind you my experience is with rhel and that family of OS's )

bigrigdriver 12-28-2012 10:37 PM

Copy /etc/bash/bashrc into your user and root folders as .bashrc. It serves as a template that you can edit to suit the your preferences when working as user or as root. There is no need to remove any changes you have made to /etc/bash/bashrc. The next time you have an update to bash, /etc/bash/bashrc will be overwritten. The .bashrc in you home or root folder will not be touched by an upgrade.

To make your desired PATH permanent, add this to your .bashrc:

export PATH=$PATH:/usr/games/bin

If you want to add another folder to the PATH, just add a colon and the next folder in the PATH.

Once you are done editing .bashrc, save it then run source .bashrc to immediately see the change.

onebuck 12-29-2012 07:11 AM

Member Response
 
Hi,

I agree with bigrigdriver's suggestion and I advise users to setup '.bashrc & .bash_profile for their users. Look at this LQ post #5 which shows you how to use '.bashrc' and '.bash_profile for your user. In my example you source '~/.bashrc' via '~/.bash_profile'. Modify the sample '.bashrc' to suit your needs.

HTH!

cravengemetzel 12-30-2012 06:52 PM

I dug into the Gentoo docs and came to a few realizations: $PATH variables are not typically stored in /etc/profile, but rather specified in files in the /etc/env.d directory which is then parsed with env-update and catenated into /etc/profile.env. Second, my specific problem, and the reason I was trying to edit the paths in the first place, was solved when I added myself to a group. (Stupid me! This should have been the first thing that I checked..)

And finally, there is a small discrepancy in that the $ROOTPATH in a no-x environment differs from the $ROOTPATH in my X environment (the one in the no-x environment holds more directories than the one in the X environment). But this is a really, really, really small problem as root is authorized to do anything, anyway - so now I'm marking this thread as solved. Thanks for all your help, I really do appreciate it.


All times are GMT -5. The time now is 05:33 PM.