Subject: ksh - Inconsistent Counting
To: NetBSD Current <current-users@netbsd.org>
From: Conrad T. Pino <Conrad@Pino.com>
List: current-users
Date: 02/02/2004 20:26:20
Script function for "ksh" counts inconsistently if
"stdin" is a pipe "|" but works if redirected "<".

Function "do_none" doesn't pipe or redirect and counts as intended.
Function "do_pipe" uses a pipe for stdin and doesn't count at all.
Function "do_redir" redirects stdin and counts like "do_none".

Out from each function follows:
$ ./testcount.sh
do_none
0
1
2
3
do_pipe
0
0
0
0
do_redir
0
1
2
3
$

Is the inconsistency a bug or a feature?

Test script "testcount.sh" follows:
====== cut here ======
#!/bin/ksh
#
function do_count {
	let MyCount=$MyCount+1
	return 0
}
#
function do_none {
	typeset -i MyCount=0

	echo $MyCount
	do_count
	echo $MyCount
	do_count
	echo $MyCount
	do_count
	echo $MyCount

	return 0
}
#
function do_pipe {
	typeset -i MyCount=0

	echo $MyCount
	echo fido | do_count
	echo $MyCount
	echo fido | do_count
	echo $MyCount
	echo fido | do_count
	echo $MyCount

	return 0
}
#
function do_redir {
	typeset -i MyCount=0

	echo $MyCount
	do_count < /dev/null
	echo $MyCount
	do_count < /dev/null
	echo $MyCount
	do_count < /dev/null
	echo $MyCount

	return 0
}
#
echo do_none
do_none
echo do_pipe
do_pipe
echo do_redir
do_redir
====== cut here ======