I know there are no active developers at this point, but here's one for
the archives in case there are active developers in the future.

The ${.sh.subshell} (subshell level) variable is broken:

case $(echo ${.sh.subshell} 1>&2
       echo ${.sh.subshell} 1>&2
       echo ${.sh.subshell}) in
1) echo ok ;;

This should output '1' twice and then 'ok'. Instead it outputs '1' and
then '0'.

This means ${.sh.subshell} is reset after the first access, so only the
first access is correct.

Interestingly this all works fine on ancient ksh93, at least "Version M
1993-12-28 r" as installed on sdf-eu.org. But versions as of at least
2010 and later all have this problem.

Since ksh93 uniquely does subshells without forking, the canonical
method involving the comparison of $$ with $(exec sh -c 'echo $PPID')
doesn't work either, as subshells don't get separate PIDs.

As far as I can tell, that leaves ksh93 without *any* reliable way of
figuring out if you're in a subshell.

I need this capability for my shell library to support ksh93. If anyone
can think of any workarounds, please let me know.

Many thanks,

- Martijn
ast-developers mailing list

Reply via email to