(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SRC_DIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(pwd)})])
                left_token: <Left_CommandSub "$(">
                spids: [51 53]
              )
            }
          spids: [50]
        )
      ]
      spids: [50]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:JAVA_ARCHIVE)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (Pipeline
                          children: [
                            (C {(grep)} {(-i)} {(Lit_Other "^") (JAVA_ARCHIVE)} {(.config)})
                            (C {(cut)} {(-f2)} {(-d) (SQ <"=">)})
                          ]
                          negated: False
                        )
                      ]
                    )
                  left_token: <Left_CommandSub "$(">
                  spids: [61 81]
                )
              )
            }
          spids: [59]
        )
      ]
      spids: [59]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$JAVA_ARCHIVE"))} {(Lit_Other "=")} {(DQ )} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} {(DQ ("ERROR: configuration property 'JAVA_ARCHIVE' is not set."))})
            (C {(exit)} {(1)})
          ]
          spids: [-1 102]
        )
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(KW_Bang "!")} {(-f)} {(DQ ($ VSub_Name "$JAVA_ARCHIVE"))} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} 
              {(DQ ("ERROR: configuration property 'JAVA_ARCHIVE' points to nonexistent file."))}
            )
            (C {(exit)} {(1)})
          ]
          spids: [116 132]
        )
      ]
      spids: [-1 146]
    )
    (C {(rm)} {(-rf)} {($ VSub_Name "$SRC_DIR") (/work/overlay/java)})
    (C {(mkdir)} {(-p)} {($ VSub_Name "$SRC_DIR") (/work/overlay/java/opt)})
    (C {(tar)} {(-xvf)} {($ VSub_Name "$JAVA_ARCHIVE")} {(-C)} 
      {($ VSub_Name "$SRC_DIR") (/work/overlay/java/opt)}
    )
    (C {(cd)} {($ VSub_Name "$SRC_DIR") (/work/overlay/java/opt)})
    (C {(mv)} 
      {
        (CommandSubPart
          command_list: (CommandList children:[(C {(ls)} {(-d)} {(Lit_Other "*")})])
          left_token: <Left_CommandSub "$(">
          spids: [187 193]
        )
      } {(java)}
    )
    (C {(mkdir)} {($ VSub_Name "$SRC_DIR") (/work/overlay/java/bin)})
    (ForEach
      iter_name: FILE
      iter_words: [
        {
          (CommandSubPart
            command_list: (CommandList children:[(C {(ls)} {(java/bin)})])
            left_token: <Left_CommandSub "$(">
            spids: [210 214]
          )
        }
      ]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (C {(ln)} {(-s)} {(../opt/java/bin/) ($ VSub_Name "$FILE")} {(../bin/) ($ VSub_Name "$FILE")})
          ]
          spids: [216 229]
        )
      spids: [209 -1]
    )
    (C {(cp)} {(-r)} {($ VSub_Name "$SRC_DIR") (/work/overlay/java/) (Lit_Other "*")} 
      {($ VSub_Name "$SRC_DIR") (/work/src/minimal_overlay)}
    )
    (C {(echo)} {(DQ ("Java has been installed."))})
    (C {(cd)} {($ VSub_Name "$SRC_DIR")})
  ]
)