Odd ksh problem

Odd ksh problem

Post by Robert Pei » Sun, 02 Mar 2008 04:42:58


This worked on Uwin, but it is blowing up on my Mac. I just have a
fragment here.

Data prints out a colon separated record of every week in our database
for a stock "$i." I change the colon to <TAB>, extract the first, third
and fourth fields and pass the last 200 lines on to a while loop.

I put tee foobar in to be sure the data was actually getting to the
loop. It is.

The loop has been compressed to just print the lines coming in. From 0
to 2 random lines get printed. There is no pattern I have seen. It is
possible you can't pipe data to a while loop on a Mac. Maybe it isn't
supposed to work on any machine. Maybe there is something about dual
core machines that causes the problem.

I could rewrite the script to use awk. Originally it was an awk script
that I rewrote to experiment with ksh. However, ksh ought to work if I
set it up right.

data $1 |
tr : '\t' |
field 1 3 4 |
tail -200 |
tee foobar |

while read -r line
do print -r -- $line
done

--
Robert B. Peirce, Venetia, PA 724-941-6883
bob AT peirce-family.com [Mac]
rbp AT cooksonpeirce.com [Office]
 
 
 

Odd ksh problem

Post by Robert Pei » Sun, 02 Mar 2008 05:52:09

In article < XXXX@XXXXX.COM >,



If I say

tail -200 > foobar
exec 0< foobar
while . . .

it works, but isn't stdin always supposed to be open?

--
Robert B. Peirce, Venetia, PA 724-941-6883
bob AT peirce-family.com [Mac]
rbp AT cooksonpeirce.com [Office]

 
 
 

Odd ksh problem

Post by Bob Harri » Sun, 02 Mar 2008 10:07:27

In article < XXXX@XXXXX.COM >,



why not try

data $1 | awk -F: '{print $1, $3, $4}' | tail -200
 
 
 

Odd ksh problem

Post by Robert Pei » Mon, 03 Mar 2008 02:04:56

In article < XXXX@XXXXX.COM >,




No reason. I just tried to run the script as it sat. I figured I would
worry about changing it once I got it working. Besides, this change
doesn't make the while loop work.

The main question was why can't I pipe information into a ksh while loop
on my Mac when I can do it on other Unix installations? This is made
more confusing to me by the fact that the following does work:

. . .
tail -200 > tmp-file

exec 0< tmp-file
while read -r line
. . .

From my point of view, stdin is stdin and a pipe should work here.

--
Robert B. Peirce, Venetia, PA 724-941-6883
bob AT peirce-family.com [Mac]
rbp AT cooksonpeirce.com [Office]
 
 
 

Odd ksh problem

Post by Bob Harri » Mon, 03 Mar 2008 10:42:06

In article < XXXX@XXXXX.COM >,





Well, why not try a different shell. For example instead of ksh,
try bash or zsh. The 'while', the 'read' and the stdin
redirection is a function of the shell. Perhaps it is your shell
that is having problems.

If the behavior works with a different shell, then check the
version of ksh on Mac OS X vs the other Unix systems you use. On
Tiger I'm seeing:
version sh (AT&T Labs Research) 1993-12-28 p
and Leopard is showing:
version sh (AT&T Research) 1993-12-28 s+

MacPorts says it has the following 2 versions of ksh
ksh93 @2007-06-28 shells/ksh93
pdksh @5.2.14 shells/pdksh

Bob Harris
 
 
 

Odd ksh problem

Post by Robert Pei » Tue, 04 Mar 2008 01:17:33

In article < XXXX@XXXXX.COM >,






Thanks, Bob, but that defeats the purpose of trying to figure out why
this doesn't work when it should. In an earlier version of this script
I used awk for everything. I switched to ksh because the built-ins
allowed me to do everything directly in the shell so I didn't have to
call other programs.


The version I am running at the office is 1993-12-28 q. It is possible
the pipe-to-while capability was added in q and did not exist in p.

I found www.macports.org, but I cannot figure out if there is a way just
to get ksh93 without installing the whole MacPorts package, so I am
going to do that and try to get there version of ksh93.

--
Robert B. Peirce, Venetia, PA 724-941-6883
bob AT peirce-family.com [Mac]
rbp AT cooksonpeirce.com [Office]