On Thu, 15 May 2008 09:46:27 -0500 Reid Linnemann <[EMAIL PROTECTED]> wrote:
> Written by Montag on 05/14/08 19:20>> > > This should be a fairly simple process, I don't really know what I > > am missing. > > > > I've got the following in the .bash_profile of a basic user account: > > > > # set prompt [EMAIL PROTECTED]/dir] $ (# for root) > > PS1 = ' [EMAIL PROTECTED] ' > > case `id -u` in > > 0) PS1='${PS1} # ';; # root > > *) PS1='${PS1} $ ';; # everyone else > > > > When I log in, I am greeted with: > > ${PS1} $ $ > > > > However, if I su to root, I get: > > [EMAIL PROTECTED] /home/user]# > > > > That is what I wanted, but for some reason it is not working for a > > normal user. I thought perhaps the problem could be > > that .bash_profile is only loaded when a non-login shell is > > spawned, but a quick consultation of man bash revealed that bash > > reads ~/.bash_profile when it is invoked as a login shell. > > > > My next thought was that it was a permissions issue, but: > > su > > chmod 777 .bash_profile > > exit > > logout > > login > > > > That did not change the results, the output was still the same as > > above. This is all being done at the console, by the way. > > > > Appreciate any advice, > > > > montag > > -------------------------- > > "Give the people contests they win by remembering the words to more > > popular songs or the names of state capitals or how much corn Iowa > > grew last year. Cram them full of non-combustible data, chock them > > so damned full of 'facts' they feel stuffed, but absolutely > > 'brilliant' with information. Then they'll feel they're thinking, > > they'll get a sense of motion without moving." > > There are a few problems with what you are attempting here. > > Your ~/.bash_profile is executed once, only when you log in. When you > su to root, a shell is started for root (according to root's shell > set in /etc/passwd) and that shell will do whatever it wants to do as > far as dotfile processing is concerned. Your ordinary > user's .bash_profile is ignored. > > Since the ordinary user's .bash_profile is only executed once, when > the user's shell starts, the *) condition is always met in the case > statement, so that expression is executed: > > PS1='${PS1} $ ';; > > This will always result in PS1 being the literal '${PS1} $ ' for that > user. Why? Because if you read your bash manual you'll see that > variable expansion does not happen in single quoted strings. > > PS1="${PS1} \$ ";; > > The above string will do what you intend, it will set PS1 to whatever > ${PS1} is expanded to, plus the extra ' $ ' (you have to escape a > literal $ in a double quoted string). > > As has been mentioned before, what you really want is to use the '\$' > literal to clue in the sh/bash to use a # for root and $ for all other > users. > > PS1="${PS1} \\$ ";; > > That is the PS1 that will do it. > > But again, because su invokes a new shell, if root's shell is not a sh > variant that uses $PS1, like the default csh, your prompt will not > carry over. csh will uses its own internal prompt variable and ignore > sh's PS1 environment variable. I placed the following in my ~/.bash_profile file. # This is the .bash_profile file # Read on bash login and similar to .profile # This file passes control to the '.bashrc' file if it is present if [ -f ~/.bashrc ]; then . ~/.bashrc fi Then in my ~/.bashrc file, I created an alias: alias su='su -m' Now, whenever I go to root, the environment is not modified and I still have bash as my shell. I don't know if this will work for you or not. It should not hurt to try it. -- “Gerard” [EMAIL PROTECTED] Love is in the offing. Be affectionate to one who adores you.
signature.asc
Description: PGP signature