The function serialisation code thinks that 1 is the default file descriptor for <> redirections, when it is actually 0.
BEFORE $ a () { <> f ;}; declare -f a a () { 0<> f } $ a () { 1<> f ;}; declare -f a a () { <> f } AFTER $ a () { <> f ;}; declare -f a a () { <> f } $ a () { 1<> f ;}; declare -f a a () { 1<> f } --- print_cmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/print_cmd.c b/print_cmd.c index e7021338..2ad4b8ef 100644 --- a/print_cmd.c +++ b/print_cmd.c @@ -1199,7 +1199,7 @@ print_redirection (REDIRECT *redirect) case r_input_output: if (redirect->rflags & REDIR_VARASSIGN) cprintf ("{%s}", redir_word->word); - else if (redirector != 1) + else if (redirector != 0) cprintf ("%d", redirector); cprintf ("<> %s", redirectee->word); break; -- 2.45.3