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 ======