New uses for csh
Gordon Moffett
gam at proper.UUCP
Sun Jun 24 13:16:13 AEST 1984
It was begining to frustrate me that the csh ``alias'' command accepted
only one-line definitions; it is impossible to have an alias that uses
``if-then-else''.
My solution to this problem was using a combination of ``source''
and ``alias'' allow possibly lengthy alias-type commands using more
complex csh constructions.
This is particularly applicable in the following examples. The UniSoft
port I am using does not support the ``pushd'' and ``popd'' commands
of csh, so I have implimented them thus:
[in my .cshrc]:
alias popd 'set argv = (\!*) ; source ~/csh/popd'
alias pushd 'set argv = (\!*) ; source ~/csh/pushd'
[~/csh/popd]:
if (! $?_dirstack || $#_dirstack < 1) then
echo "popd: Directory stack empty."
else
chdir $_dirstack[1]
echo $_dirstack
shift _dirstack
endif
[~/csh/pushd]:
if ($#argv != 1) then
echo "pushd: Arg count."
else
if (! $?_dirstack) set $_dirstack = ()
set _dirstack = (`pwd` $_dirstack)
chdir $argv
echo $argv $_dirstack
endif
The advantages to this method are:
o More sophisticated (multi-line) csh constructs are allowed
o Operates on the current shell (qv, chdir)
o No overhead for reading .cshrc (as with an executable script)
The disadvantages are:
o Argv probably should be saved somewhere and restored
o No ``exit'' from ``if'' statements (other than -- ech --
``goto'')
o Requires a file access
[ These scripts were derived from someone else's implimentation of
pushd/popd for csh's lacking them; I don't recall who that is,
but thank you anyway ]
[ Also do not use this as launch-point for another csh vs sh argument
as it is not my intention to start one -- I shouldn't have to say
this but I've been on the net for a while ... ]
Comments and discussion are encouraged.
--
Gordon A. Moffett
{ hplabs!nsc, decvax!sun!amd, ihnp4!dual } !proper!gam
More information about the Comp.unix
mailing list