.bashrc guru needed
leeoliveshackelford at surewest.net
leeoliveshackelford at surewest.net
Mon Sep 22 18:24:39 UTC 2014
Greetings, dear FreeBSD enthusiasts. Is there a bash guru who can help
me correct the following script for .bashrc. I copied this script from a
web page whose location I failed to record, and have forgotten. It is
supposed to write each word of the prompt in a different color, which it
does correctly. This color scheme is generated by the function
bash_prompt(). It is also supposed to write the current directory in an
abridged format in which the portion of the filepath that refers to the
home directory, if any, is replaced by a tilde (~), and then, long path
descriptions are truncated on the left at 25 characters, with two
periods then added. This result is created by the function
bash_prompt_command(). This function does not work. In place of the
value of the variable NEW_PWD, the operating system simply prints the
error message "unbound variable, then generates a prompt line listing
the variable's name, $NEW_PWD, in place of its value. This variable is
given values on three lines, 18, 22, and 24. Where does it loose its
binding? I have made several modifications to the function in an attempt
to get it to work, but to no avail. Following is a partial listing.
BLOCKSIZE="${BLOCKSIZE:-1024}"; export BLOCKSIZE
CVSROOT="${CVSROOT:-/home/ncvs}"; export CVSROOT
TMPDIR="${TMPDIR:-/tmp}"; export TMPDIR
set +H #disables bash!-completion
export PATH=$PATH:$HOME/.local/bin
#Inserted here are a group of alias commands.
# The following statements control the prompt.
export CLICOLOR="YES"
bash_prompt_command() {
# How many characters of the $PWD should be kept
local pwdmaxlen=25
# Indicate that there has been dir truncation
local trunc_symbol=".."
local dir=${PWD##*/}
pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
NEW_PWD=${PWD/#$HOME/~}
local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
if [ ${pwdoffset} -gt "0" ]
then
NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
else
NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
fi }
bash_prompt()
{
#Inserted here are a list of variables set to descriptions of various
colors.
local UC=$EMG # user's color
[ $UID -eq "0" ] && UC=$EMR # root's color
PS1="${UC}s ${EMW}${NEW_PWD} ${UC}\$ ${NONE}"
}
PROMPT_COMMAND=bash_prompt_command; bash_prompt; unset bash_prompt
export PROMPT_COMMAND
# End of statements to control prompt
I added the export statements on lines 1, 2, and 3. I added the
semi-colons on line 35, and the export PROMP_COMMAND on line 36. I
inserted the "else" statement on line 23. None of these modifications
helped. What is the programmer telling or trying to tell the interpreter
to do on line 16, "local dir=${PWD/##*/}" ? What is the programmer
telling, or trying to tell the interpreter to do on line 18,
"NEW_PWD=${PWD/#$HOME/~}" ? Please, to those coming from the world of c
programming language, bash syntax seems to be a mystery. Any and all
suggestions will be appreciated. Newby Lee
More information about the freebsd-questions
mailing list