the issue of environment value $PS1 set under Ubuntu 10.04

littlebat dashing.meng at gmail.com
Fri Jun 4 01:40:51 PDT 2010


This issue was posted onto lfs-support mailing list yesterday (see: http://linuxfromscratch.org/pipermail/lfs-support/2010-June/038814.html ), unluckly I disabled the mail delivery of LFS mailing list some days ago, so I can't continue discuss it on the lfs-support mailing list. And, I consider it is a bug of LFS6.6 book, so I start a new thread on the lfs-dev list to discuss it.

I am using Ubuntu 10.04 as the LFS building host. When I set environment with the instructions at: 4.4. Setting Up the Environment: http://www.linuxfromscratch.org/lfs/view/6.6/chapter04/settingenvironment.html , I found the commands provided by LFS book can't set $PS1 value under Ubuntu 10.04 host properly. The commands is below:

<code>
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
</code>

The issue is Ubuntu has a system-wide .bashrc file for interactive bash(1) shells, it is /etc/bash.bashrc. $PS1 has been set to PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' in this file. When the command above invoke "/bin/bash" to start a new interactive bash shells, /etc/bash.bashrc will invoked first, this $PS1 value will be seted. So, $PS1 keep as the format like "lfs at u1004b2-desktop:~$ ", not the format excepted by LFS6.6 book like "lfs:~$ ".

And, /etc/bash.bashrc in Ubuntu 10.04 also sets some other bash behavior, such as: update value of $LINES and $COLUMNS, give sudo hint, give the hint when can't find a command, etc... I hope these will not affect a clear LFS building environment :-(

And, /etc/profile will invoke /etc/bash.bashrc in Ubuntu 10.04.

I think, $PS1 is a display style for the user interact with bash, set it in the ~/.bashrc maybe a good idea? Under Ubuntu 10.04, I found the ~/.bashrc also overwrite the $PS1 value in its /etc/bash.bashrc.

Below is the content of /etc/bash.bashrc in Ubuntu 10.04:
<code>
# System-wide .bashrc file for interactive bash(1) shells.

# To enable the settings / commands in this file for login shells as well,
# this file has to be sourced in /etc/profile.

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, overwrite the one in /etc/profile)
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

# Commented out, don't overwrite xterm -T "title" -n "icontitle" by default.
# If this is an xterm set the title to user at host:dir
#case "$TERM" in
#xterm*|rxvt*)
#    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
#    ;;
#*)
#    ;;
#esac

# enable bash completion in interactive shells
#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
#    . /etc/bash_completion
#fi

# sudo hint
if [ ! -e "$HOME/.sudo_as_admin_successful" ]; then
    case " $(groups) " in *\ admin\ *)
    if [ -x /usr/bin/sudo ]; then
	cat <<-EOF
	To run a command as administrator (user "root"), use "sudo <command>".
	See "man sudo_root" for details.
	
	EOF
    fi
    esac
fi

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; then
	function command_not_found_handle {
	        # check because c-n-f could've been removed in the meantime
                if [ -x /usr/lib/command-not-found ]; then
		   /usr/bin/python /usr/lib/command-not-found -- $1
                   return $?
                elif [ -x /usr/share/command-not-found ]; then
		   /usr/bin/python /usr/share/command-not-found -- $1
                   return $?
		else
		   return 127
		fi
	}
fi
</code>

-- 
littlebat <dashing.meng at gmail.com>



More information about the lfs-support mailing list