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. _______________________________________________ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"