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


Reply via email to