(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tid)
          op: assign_op.Equal
          rhs: {(DQ <'keygen moduli'>)}
          spids: [7]
        )
      ]
    )
    (command.ForEach
      iter_name: i
      iter_words: [
        {(DQ <-J1>)}
        {(DQ <'-j1 -J1'>)}
        {(DQ <'-j2 -K '> ($ Id.VSub_DollarName '$OBJ') <'/moduli.ckpt'>)}
      ]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {<trace>} {(DQ <'keygen '> ($ Id.VSub_DollarName '$i'))})
            (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$OBJ') <'/moduli.out'>} 
              {($ Id.VSub_DollarName '$OBJ') <'/moduli.ckpt'>}
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Simple
                  words: [
                    {(${ Id.VSub_Name SSHKEYGEN)}
                    {<-T>}
                    {($ Id.VSub_DollarName '$OBJ') <'/moduli.out'>}
                    {<-f>}
                    {(${ Id.VSub_Name SRC) <'/moduli.in'>}
                    {($ Id.VSub_DollarName '$i')}
                  ]
                  redirects: [
                    (redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (C {<fail>} {(DQ <'keygen screen failed '> ($ Id.VSub_DollarName '$i'))})
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lines)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            words: [{<wc>} {<-l>}]
                            redirects: [
                              (redir
                                op: <Id.Redir_Less '<'>
                                loc: (redir_loc.Fd fd:0)
                                arg: {($ Id.VSub_DollarName '$OBJ') <'/moduli.out'>}
                              )
                            ]
                            do_fork: T
                          )
                      )
                    }
                  spids: [98]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<test>} {(DQ ($ Id.VSub_DollarName '$lines'))} {<-eq>} {(DQ <1>)})
                (C {<fail>} {(DQ <'expected 1 line, got '> ($ Id.VSub_DollarName '$lines'))})
              ]
            )
          ]
        )
    )
    (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$OBJ') <'/moduli.out'>} 
      {($ Id.VSub_DollarName '$OBJ') <'/moduli.ckpt'>}
    )
  ]
)