(command.CommandList
  children: [
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-lt)} {(1)} {(Id.Lit_RBracket ']')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:63)
            )
          ]
          action: [
            (command.Simple
              words: [{(echo)} {(DQ ('This script takes one argument - the docker service to run'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:74)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:78)
              arg_word: {(1)}
            )
          ]
          spids: [52 65]
        )
      ]
    )
    (C {(cd)} 
      {
        (command_sub
          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:90)
          command_list: 
            (command.CommandList
              children: [(C {(dirname)} {(DQ (${ Id.VSub_Name BASH_SOURCE))})]
            )
        ) (/../..)
      }
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-d)} {(arrow)} {(Id.Lit_RBracket ']')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:113)
            )
          ]
          action: [
            (command.Simple
              words: [{(echo)} {(DQ ('Please make sure that the top level Arrow directory'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:124)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (C {(echo)} {(DQ ("is named 'arrow'"))})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:135)
              arg_word: {(1)}
            )
          ]
          spids: [102 115]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-d)} {(parquet-cpp)} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:153)
            )
          ]
          action: [
            (command.Simple
              words: [{(echo)} {(DQ ('Please clone the Parquet repo next to the Arrow repo'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:164)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:168)
              arg_word: {(1)}
            )
          ]
          spids: [142 155]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GID)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:176)
                command_list: 
                  (command.CommandList
                    children: [(C {(id)} {(-g)} {(${ Id.VSub_Name USERNAME)})]
                  )
              )
            }
          spids: [175]
        )
      ]
    )
    (C {(docker-compose)} {(-f)} {(arrow/dev/docker-compose.yml)} {(run)} {(-u)} 
      {(DQ (${ Id.VSub_Name UID) (':') (${ Id.VSub_Name GID))} {(DQ (${ Id.VSub_Number 1))}
    )
  ]
)