bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug] Home dir in PS1 not abbreviated to tilde


From: dethrophes
Subject: Re: [bug] Home dir in PS1 not abbreviated to tilde
Date: Tue, 13 Mar 2012 16:28:30 +0100
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2

Am 13.03.2012 16:18, schrieb Roman Rakus:
On 03/13/2012 04:08 PM, dethrophes wrote:
Am 13.03.2012 06:04, schrieb Clark J. Wang:
On Mon, Mar 12, 2012 at 12:22, Yongzhi Pan<panyongzhi@gmail.com> wrote:

Tested in GNU bash, version 3.00.16(1)-release and 4.1.2(1)-release.

Upon login, home dir is displayed as tilde in PS1:
pan@BJ-APN-2 ~$ echo $PS1
\[\033[35m\]\u@\h \w$ \[\033[0m\]
pan@BJ-APN-2 ~$ pwd
/export/home/pan/

After a cd command, which change directory to $HOME (not changed at all),
it is displayed as the complete path:
pan@BJ-APN-2 ~$ cd
pan@BJ-APN-2 /export/home/pan$

The reason is that my home in passwd has a trailing slash:
pan@BJ-APN-2 /export/home/pan$ grep ^$USER: /etc/passwd
pan:x:896:1::/export/home/pan/:/bin/bash

You can also reproduce this by directly setting HOME to
`/export/home/pan/'.


This is tricky to find. I hope it will display tilde even if home dir entry
in passwd has one or more trailing slash.

I personally don't think this needs to be fixed. :)
I agree, or to be more acurate I think you should fix the passwd entry.
PS: I read the source code and do not know where this is done, maybe in
y.tab.c?


as a workaround to your problem you could have something like this in your bashrc
if shopt extglob &>/dev/null ; then
  HOME="${HOME/%+(\/)}"   # strip all trailing forward slashes
else
   while [ "${HOME}" != "${HOME%\/}" ] ; do
     HOME="${HOME%\/}"
   done
fi

I think it should hide your problem.




Is it all necessary?
HOME="${HOME%\/}"

RR
not really just being thorough.
the request was remove/handle all/multiple trailing forward slashes. e.g. /home/jjjj////////////////////
HOME="${HOME%\/}"  # only removes 1

HOME="${HOME%%+(\/)}" # removes all but only if extglob supported and enabled

the while loop was a fallback in case extglob is either not enabled or not present.

so it depends on your needs I would suggest that
HOME="${HOME%\/}"
HOME="${HOME%\/}"
HOME="${HOME%\/}"
 should cover most real world cases
or this on its own isn't pretty but does the job
while [ "${HOME}" != "${HOME%\/}" ] ; do
     HOME="${HOME%\/}"
   done




reply via email to

[Prev in Thread] Current Thread [Next in Thread]