[comp.unix.shell] Passing parameters to an alias in ksh ...under AIX

rob@lafayet.UUCP (Rob Freyder) (12/06/90)

I am trying to pass a parameter to an alias under AIX on the RS6000.
I would like to set up an alias that will take a directory name as an 
argument and then print that in the title of my X window.  I am not having
trouble changing the title ... that is a simple escape sequence.

My Problem is that I cant get the alias to accept a parameter.  I am using
$1 to reference the first parameter... Is this correct ?

Thanks.  Rob.
-- 
 ____    ____     ____                       Core Lab - Western Atlas Int'l INC
 \   \  /   /\   /    \     Rob              Humans     (318) 235-9431
  \   /   /\  \/   /\  \    Freyder          Internet   rob@lafayet.waii.com
   \/___/   \/___/   \__\                    Bang    ...!uunet!lafayet!rob

carroll@cs.uiuc.edu (Alan M. Carroll) (12/07/90)

In article <1235@lafayet.UUCP>, rob@lafayet.UUCP (Rob Freyder) writes:
> I am trying to pass a parameter to an alias under AIX on the RS6000.

You cannot access parameters in ksh alias's as you can in csh. What
you want is a function, instead. Here is my code to set my xterm
title:

# <ESC> ] 0 ; string <BEL>  and string will become the title and icon name
# <ESC> ] 1 ; string <BEL>  for icon name only
# <ESC> ] 2 ; string <BEL>  for title name only

# control codes removed - you'll have to fix them on your end.
XTITLEPRE="^[]2;"
XICONPRE="^[]1;"
XPOST="^G"

unalias cd
function CD
    {
    \cd $@
    PRWD=${PWD##${HOME}}
    if [ ! "${PRWD}" = "${PWD}" ] ; then
	PRWD="~$PRWD"
    fi
    if [[ "$TERM" = "xterm" && "$NOXTITLE" = ""  ]] ; then
	print -n -r "${XTITLEPRE}${XTITLE}${PRWD}@${HOST}${XPOST}"
    fi
    }
alias cd=CD

# Fix up the icon title just once, with the host.
if [ "$TERM" = "xterm" ] ; then
	print -n -r "${XICONPRE}${HOST}${XPOST}"
fi

-- 
Alan M. Carroll                "It's psychosomatic. You need a lobotomy.
Epoch Development Team          I'll get a saw."
CS Grad / U of Ill @ Urbana    ...{ucbvax,pur-ee,convex}!cs.uiuc.edu!carroll

greywolf@unisoft.UUCP (The Grey Wolf) (12/13/90)

In article <1235@lafayet.UUCP> rob@lafayet.UUCP (Rob Freyder) writes:
>I am trying to pass a parameter to an alias under AIX on the RS6000.
>I would like to set up an alias that will take a directory name as an 
>argument and then print that in the title of my X window.  I am not having
>trouble changing the title ... that is a simple escape sequence.
>
>My Problem is that I cant get the alias to accept a parameter.  I am using
>$1 to reference the first parameter... Is this correct ?
>
>Thanks.  Rob.

You don't use aliases for this under ksh -- you use functions, like so:
foo()
{
	if [ "$1" = "bar" ] ; then
	    echo "and grill :-)"
        fi
}

The positional parameters are interpreted in the context of the function;
that is, none of the original "$@" is visible to the function unless ex-
plicitly passed.

If your ksh doesn't support functions it is most distinctly broken.

[ I use ksh only when csh is not available.  Having to type "fg %2" is
  a minor annoyance.  Not having the set notation (such as {cat,man,do}_box
  expanding to cat_box man_box do_box) is a major annoyance.  The command
  line editing is cute, but my fingers can figure out csh history quicker.
  The delays in ksh due to overhead in the shell (as compared to csh's
  overhead) are just noticeable enough to be a nuisance.  Beats the HELL
  out of sh, though. ]
>-- 
> ____    ____     ____                       Core Lab - Western Atlas Int'l INC
> \   \  /   /\   /    \     Rob              Humans     (318) 235-9431
>  \   /   /\  \/   /\  \    Freyder          Internet   rob@lafayet.waii.com
>   \/___/   \/___/   \__\                    Bang    ...!uunet!lafayet!rob


-- 
On the 'Net:  Why are more and more fourth-level wizard(-wannabe)s trying to
invoke ninth-level magic, instead of taking the time to climb the other
(quite essential) thirteen levels so they can do this properly?
...!{ucbvax,acad,uunet,amdahl,pyramid}!unisoft!greywolf

davidsen@sixhub.UUCP (Wm E. Davidsen Jr) (12/13/90)

In article <3272@unisoft.UUCP> greywolf@unisoft.UUCP (The Grey Wolf) writes:

| If your ksh doesn't support functions it is most distinctly broken.
| 
| [ I use ksh only when csh is not available.  Having to type "fg %2" is
|   a minor annoyance.  Not having the set notation (such as {cat,man,do}_box
|   expanding to cat_box man_box do_box) is a major annoyance.  

  To misquote you, "If your ksh doesn't support brack matching it's
seriously broken." Actually just compiled with the BRACE_PAT set to
zero, if I remember the nomencature correctly.
-- 
bill davidsen - davidsen@sixhub.uucp (uunet!crdgw1!sixhub!davidsen)
    sysop *IX BBS and Public Access UNIX
    moderator of comp.binaries.ibm.pc and 80386 mailing list
"Stupidity, like virtue, is its own reward" -me

mullins@convex.COM (Don Mullins) (12/20/90)

In article <1235@lafayet.UUCP> rob@lafayet.UUCP (Rob Freyder) writes:
>I am trying to pass a parameter to an alias under AIX on the RS6000.
>I would like to set up an alias that will take a directory name as an 
>argument and then print that in the title of my X window.  I am not having
>trouble changing the title ... that is a simple escape sequence.
>
>My Problem is that I cant get the alias to accept a parameter.  I am using
>$1 to reference the first parameter... Is this correct ?
>
>Thanks.  Rob.
>-- 
> ____    ____     ____                       Core Lab - Western Atlas Int'l INC
> \   \  /   /\   /    \     Rob              Humans     (318) 235-9431
>  \   /   /\  \/   /\  \    Freyder          Internet   rob@lafayet.waii.com
>   \/___/   \/___/   \__\                    Bang    ...!uunet!lafayet!rob

I don't know how to pass args to an alias (similar to !* in csh/tcsh), but
you can in a function.  The following function will cd to the arg passed.
Then it will update the title line if you are running X windows, otherwise
it will change the prompt to reflect the cwd.

It optimizes the path by substituting a '~' for the user's home.

Our version of ksh accepts '\033' of ESC and '\007' for BEL; substitute the
actual chars if needed.

The "$@" in the cd command is equiv. to "$1" "$2" ...

"$*" could be used to get "$1d$2d$3d"... where d is the IFS variable.


both functions assume:
$HOST = hostname (i.e. "starman" for my machine).
$HOME = user's home dir.
$PWD  = present working dir.

use by:
 <filename>
alias cd=_cd

cd <dir>

--------------------------------- CUT HERE ------------------------------------
function _cd {
   # I use the if to prevent the update if the cd fails
   if 'cd' "$@"
   then
      if [ "$DISPLAY" != "" ]
      then
	 # We are running X, update the title line
         case  "$PWD" in
   	    ${HOME}*)  XTITLE="${HOST}:~${PWD#"$HOME"}" ;;
                   *)  XTITLE="${HOST}:${PWD}" ;;
         esac
         print -n "\033]2; ${XTITLE} \007"
      else
	 # Just a terminal, reset the prompt
         case  "$PWD" in
   	    ${HOME}*)   PS1="${HOST}:~${PWD#"$HOME"} $ " ;;
                   *)   PS1="${HOST}:${PWD} $ " ;;
         esac
      fi
   fi
}
--------------------------------- END HERE ------------------------------------

This one just sets the title line...

use by:
 <filename>

title <text>

--------------------------------- CUT HERE ------------------------------------
function title {
    case  "$PWD" in
	${HOME}*)  XTITLE="${HOST}:~${PWD#"$HOME"}" ;;
	*)  XTITLE="${HOST}:${PWD}" ;;
    esac
    print -n "\033]2; ${XTITLE} \007"
}
--------------------------------- END HERE ------------------------------------

Let me know if someone shows you how to get an alias to directly accept args.

Good luck,
Don
--
Don Mullins
INTERNET -- mullins@convex.com
UUCP ------ {uiucuxc, uunet, sun, ...}!convex!mullins