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

Re: nice PS1 with /bin/sh



But it does not change the prompt for you once you have set it :-(

On Mon, Apr 03, 2000 at 12:44:24AM +0900, Yutaka KAWASE wrote:
> 
> Hello all,
> 
> I have been using /usr/local/bin/bash but now tring to get used to
> /bin/sh.
> 
> In my .profile, I wrote;
> 
> PS1="$USER@`hostname`:`echo $PWD | perl -pe 's#^$ENV{HOME}#~#'`$ "
> 
> and this gives me the prompt of my favorite.
> 
> However, I don't want to use perl to set up PS1.
> I think I should use sed instead but don't know how to do that.
> 
> Any suggestions?
> 
> 
> -- 
> Yutaka KAWASE <yutaka@jpnet.nu>

alias cd=do_cd

do_cd() {
	builtin cd $@
	pwd=${PWD##$HOME}
	[ ${#pwd} -lt ${#PWD} ] && pwd="~$pwd"
	[ "$hostname" ] || hostname=$(hostname)
	PS1="$USER@$hostname:$pwd\$ "
}

This is really the same as /bin/ksh on OpenBSD, fwiw.

Now personally I add a little 'fun' if it's a terminal:

title() {
 echo "\033]2;$*\007\c"
}
icon() {
 echo "\033]1;$*\007\c"
}

if [ "$TERM" = "xterm" -o "$TERM" = "xterm-color" -o "$TERM" = "screen" ];
then
	[ "$hostname" ] || hostname=$(hostname)
	PS1="$hostname\$ "
	m=$(uname -m)
	s=$(uname -s)
	r=$(uname -r)
	ver="$m $s $r"
	titleicon='icon "$pwd";title "$pwd $(date +%m%d\ %a\ %r) '$LOGNAME'@'$hostname', '$ver'"'
	do_cd() {
		builtin cd $@
		pwd=${PWD##$HOME}
		[ ${#pwd} -lt ${#PWD} ] && pwd="~$pwd"
		[ "$hostname" ] || hostname=$(hostname)
		PS1="$USER@$hostname:$pwd\$ "
		eval $titleicon
	}
fi

Yes, you can set the title with screen, with the following .screenrc stuff:

termcap  xterm hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
terminfo xterm hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l
termcap  xterm-color hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
terminfo xterm-color hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l
termcap  rxvt hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
terminfo rxvt hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l

register [ "\033:se noai\015a"
register ] "\033:se ai\015a"
bind ^] paste [.]

termcap  xterm 'hs:ts=\E]2;:fs=\007:ds=\E]1;Screen\007'
terminfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]1;Screen\007'
termcap  xterm-color 'hs:ts=\E]2;:fs=\007:ds=\E]1;Screen\007'
terminfo xterm-color 'hs:ts=\E]2;:fs=\007:ds=\E]1;Screen\007'
termcap  rxvt 'hs:ts=\E]2;:fs=\007:ds=\E]1;Screen\007'
terminfo rxvt 'hs:ts=\E]2;:fs=\007:ds=\E]1;Screen\007'

... so that when flipping around to different 'screens' within
screen, you can see the title of your xterm/rxvt/etc change :-)

You are quite right that perl is not something you want to be
running from a shell script that gets called alot.  Unless you
have a really fast machine, you will notice this 'overhead'.
It's almost always faster to do alot of extra things in
the native shell language than it is to call another program.
Same comparison as its easier to do extra cpu stuff to avoid
hitting the hard drive ..

Have fun!
-- 
Todd Fries .. todd@fries.net