(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PI)
          op: assign_op.Equal
          rhs: {<.postinstall>}
          spids: [4]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TMP)
          op: assign_op.Equal
          rhs: {<'/usr/tmp'>}
          spids: [7]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PATH)
          op: assign_op.Equal
          rhs: {<'/bin'> <Id.Lit_Colon ':'> <'/usr/bin'> <Id.Lit_Colon ':'> <'/usr/local/bin'>}
          spids: [10]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Pound '$#'))} {<-ne>} {<1>} 
                  {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'Usage: '> ($ Id.VSub_Number '$0') <' <package file>'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [18 32]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:dir)
          op: assign_op.Equal
          rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>}))}
          spids: [51]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <->)} 
                  {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:f)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [76]
                )
              ]
            )
          ]
          spids: [58 74]
        )
      ]
      else_action: [
        (command.Case
          to_match: {(DQ ($ Id.VSub_Number '$1'))}
          arms: [
            (case_arm
              pat_list: [{<'/'> <Id.Lit_Star '*'>}]
              action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:f)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1'))}
                      spids: [95]
                    )
                  ]
                )
              ]
              spids: [91 93 100 -1]
            )
            (case_arm
              pat_list: [{<Id.Lit_Star '*'>}]
              action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:f)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_DollarName '$dir') <'/'> ($ Id.VSub_Number '$1'))}
                      spids: [106]
                    )
                  ]
                )
              ]
              spids: [103 104 113 -1]
            )
          ]
        )
      ]
    )
    (C {<cd>} {($ Id.VSub_DollarName '$TMP')})
    (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$PI')})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {<-f>} {($ Id.VSub_DollarName '$PI')} {<Id.Lit_RBracket ']'>})
              ]
            )
          action: [
            (C {<echo>} 
              {
                (DQ ($ Id.VSub_DollarName '$PI') <' is in '> ($ Id.VSub_DollarName '$TMP') 
                  <', please remove it first.'>
                )
              }
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [132 142]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {($ Id.VSub_DollarName '$f')} 
                  {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'Couldn\'t find package '> ($ Id.VSub_DollarName '$f') <.>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [161 173]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Pipeline
                  children: [
                    (command.Simple
                      words: [{<bunzip2>} {<--help>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      words: [{<grep>} {<usage>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  negated: F
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BUNZIP2)
                  op: assign_op.Equal
                  rhs: {<bunzip2>}
                  spids: [214]
                )
              ]
            )
          ]
          spids: [194 212]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BUNZIP2)
              op: assign_op.Equal
              rhs: {<smallbunzip2>}
              spids: [219]
            )
          ]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {<cat>} {($ Id.VSub_DollarName '$f')})
        (C {($ Id.VSub_DollarName '$BUNZIP2')})
        (C {<pax>} {<-r>} {<-p>} {<e>})
      ]
      negated: F
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {<-f>} {($ Id.VSub_DollarName '$PI')} {<Id.Lit_RBracket ']'>})
              ]
            )
          action: [
            (C {<sh>} {<-e>} {($ Id.VSub_DollarName '$PI')})
            (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$PI')})
          ]
          spids: [243 253]
        )
      ]
    )
    (command.ForEach
      iter_names: [d]
      iterable: 
        (for_iter.Words
          words: [{<'/usr/man'>} {<'/usr/local/man'>} {<'/usr/gnu/man'>} {<'/usr/X11R6/man'>}]
        )
      body: 
        (command.DoGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (C {<Id.Lit_LBracket '['>} {<-d>} {(DQ ($ Id.VSub_DollarName '$d'))} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  action: [(C {<makewhatis>} {($ Id.VSub_DollarName '$d')})]
                  spids: [288 301]
                )
              ]
            )
          ]
        )
    )
  ]
)