naim@eecs.nwu.edu (Naim Abdullah) (03/24/89)
A friend of mine wants a csh alias that will print all lines in
the history list that match a pattern if one is supplied, otherwise
just print the history.
He asked me and I suggested the following csh alias:
alias h ' \
if ( "X\!*" == "X" ) then \
history \
else \
history | grep \!* \
endif'
For some reason, this does not work. Can some kind soul explain why
and supply a working answer to this problem ?
Thanks.
Naim Abdullah
Dept. of EECS,
Northwestern University
Internet: naim@eecs.nwu.edu
Uucp: {oddjob, chinet, att}!nucsrl!naimmarcoz@MARCOZ.BOLTZ.CS.CMU.EDU (Marco Zagha) (03/30/89)
In article <3680046@eecs.nwu.edu>, naim@eecs.nwu.edu (Naim Abdullah) writes: > > alias h ' \ > if ( "X\!*" == "X" ) then \ > history \ > else \ > history | grep \!* \ > endif' > > For some reason, this does not work. Can some kind soul explain why > and supply a working answer to this problem ? I think this will do the trick: alias hh 'history | grep "\!*"' This works because 'grep ""' is not the same as 'grep'. Your alias produces strange behavior. Neither the "if" or the "else" condition is ever executed. I don't know why. == Marco (marcoz@cs.cmu.edu) --
maart@cs.vu.nl (Maarten Litmaath) (03/30/89)
naim@eecs.nwu.edu (Naim Abdullah) writes:
\A friend of mine wants a csh alias that will print all lines in
\the history list that match a pattern if one is supplied, otherwise
\just print the history.
\He asked me and I suggested the following csh alias:
\alias h ' \
\if ( "X\!*" == "X" ) then \
\history \
\else \
\history | grep \!* \
\endif'
\For some reason, this does not work.
Welcome to csh! Generally it doesn't like foreach, while, etc. in aliases.
Solutions:
alias h 'set q=(\!*); eval h$#q'
alias h0 history
alias h1 '(history | sed -n -e \$q -e /"$q"/p)'
or
alias h 'if ("\!*" == "") set status=1 &&'\
'history | sed -n -e \$q -e /"\!*"/p ||'\
history
or
alias h 'if (\!* == "") set status=1 &&'\
'history | sed -n -e \$q -e /\!*/p ||'\
history
The final version causes csh to complain if multiple arguments are given.
BTW, it's obvious why I used sed instead of grep.
--
Modeless editors and strong typing: |Maarten Litmaath @ VU Amsterdam:
both for people with weak memories. |maart@cs.vu.nl, mcvax!botter!maart