weird csh thing

Frank P. Bresz fpb at ittc.wec.com
Tue Jan 8 11:11:31 AEST 1991


In article <BAGCHI.91Jan6000722 at snarf.eecs.umich.edu> bagchi at eecs.umich.edu (Ranjan Bagchi) writes:

>anyone care to explain??  (I`m in csh)

>$ set p = "w | tail +3 "
>$ echo $p
>w | tail +3
>$ $p
>Usage: w [ -hlsuw ] [ user ]
>$ w | tail +3
>benjo    ttyp3    10:13pm           41      4  -sh
>benjo    ttyp4    10:17pm         3:22      4  -csh
>$ exit
>$ exit

>Process shell finished

>shouldn't "$p" have the same effect as "w | tail +3" ?

>	-rj

Well,
	I'll take a shot at an explanation.

	By saying:

		set p = "w | tail +3 "

	You have effectively escaped the normal behavior of | which is to
run a pipe to the next command in line.  Thereby passing the | to the 'w'
command as the first argument.  'w' does not understand what the '|'
symbol means so it spits out it's usage command.  This command shows what I
mean:

ittc% w \| tail +3
Usage: w [ -hlsuw ] [ user ]

	Had you instead said :

	eval $p

	You would have received the 'w' portion only the 'tail' would not
execute,  (at least it didn't under my csh SunOS4.1, why I don't know).
This scenario worked for both bash and sh.

$ p="w | tail +3"
$ $p
Usage: w [ -hlsuw ] [ user ]
$ eval $p
fpb      console  12:44pm  6:15   9:32   9:27  sv_xv_sel_svc
young    ttyh5    12:40pm  5:54                telnet wssi3
young    ttyha    11:29am  6:46      5      5  telnet wssi3
miller   ttyhc     2:33pm  3:33      3         -csh
fpb      ttyp0    12:44pm    28                /emacs/sun4/etc/bash
fpb      ttyp3     6:26pm            9      1  w
mance    ttyp9     3:10pm  3:49                -


	In CSH however I tried and received : 


ittc% set p = " w | tail +3 "
ittc% $p
Usage: w [ -hlsuw ] [ user ]
ittc% echo $p
w | tail +3
ittc% eval $p
  7:03pm  up 2 days, 12:04,  6 users,  load average: 1.60, 2.24, 2.05
User     tty       login@  idle   JCPU   PCPU  what
fpb      console  12:44pm  6:19   9:45   9:40  sv_xv_sel_svc
young    ttyh5    12:40pm  5:58                telnet wssi3
young    ttyha    11:29am  6:50      5      5  telnet wssi3
miller   ttyhc     2:33pm  3:37      3         -csh
fpb      ttyp0    12:44pm    32                /emacs/sun4/etc/bash
fpb      ttyp3     6:26pm           10      1  w
mance    ttyp9     3:10pm  3:54                -
ittc%

	Clearly the tail failed.  Any CSH wizards know why.  I received
bash about 4 months ago and haven't touched csh since.  Out of pure
inquisitiveness what is wrong with : 

	alias p "w | tail +3"
	p
--
| ()  ()  () | Frank P. Bresz   | Westinghouse Electric Corporation
|  \  /\  /  | fpb at ittc.wec.com | ITTC Simulators Department
|   \/  \/   | uunet!ittc!fpb   | Those who can, do. Those who can't, simulate.
| ---------- | +1 412 733 6749  | My opinions are mine, WEC don't want 'em.



More information about the Comp.unix.shell mailing list