(command.CommandList
  children: [
    (C {<mkdir>} {<service>} {<svc0>} {<svc1>} {<svc2>} {<'svc2/log'>})
    (command.Simple
      words: [{<catexe>} {<'svc0/run'>}]
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 26
              stdin_parts: [<'#!/bin/sh\n'> <'echo svc0 ran >> output\n'>]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<catexe>} {<'svc1/run'>}]
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 38
              stdin_parts: [<'#!/bin/sh\n'> <'echo svc1 ran\n'>]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<catexe>} {<'svc1/log'>}]
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 50
              stdin_parts: [<'#!/bin/sh\n'> <'exec cat > output\n'>]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<catexe>} {<'svc2/run'>}]
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 62
              stdin_parts: [<'#!/bin/sh\n'> <'echo svc2 ran\n'>]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<catexe>} {<'svc2/log/run'>}]
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 74
              stdin_parts: [<'#!/bin/sh\n'> <'exec cat > ../output\n'>]
            )
        )
      ]
      do_fork: T
    )
    (C {<ln>} {<-s>} 
      {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>})) <'/svc'> 
        <Id.Lit_LBracket '['> <0-9> <Id.Lit_RBracket ']'>
      } {<'service/'>}
    )
    (command.Sentence
      child: 
        (command.Simple
          words: [
            {<svscan>}
            {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>})) <'/service'>}
          ]
          redirects: [
            (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<svscan.log>})
            (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
          ]
          do_fork: T
        )
      terminator: <Id.Op_Amp _>
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:svscanpid)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Bang '$!')}
          spids: [110]
        )
      ]
    )
    (command.WhileUntil
      keyword: <Id.KW_Until until>
      cond: 
        (condition.Shell
          commands: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<svok>} {<svc0>})
                (C {<svok>} {<svc1>})
                (C {<svok>} {<svc2>})
                (C {<svok>} {<'svc2/log'>})
              ]
            )
          ]
        )
      body: (command.DoGroup children:[(C {<sleep>} {<1>})])
    )
    (C {<kill>} {($ Id.VSub_DollarName '$svscanpid')})
    (command.Simple
      words: [{<wait>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})
        (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
      ]
      do_fork: T
    )
    (C {<svc>} {<-dx>} {<Id.Lit_ArrayLhsOpen 'svc['> <0-9> <Id.Lit_RBracket ']'>} {<'svc2/log'>})
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.AndOr
              ops: [Id.Op_DPipe Id.Op_DPipe Id.Op_DPipe]
              children: [
                (C {<svok>} {<svc0>})
                (C {<svok>} {<svc1>})
                (C {<svok>} {<svc2>})
                (C {<svok>} {<'svc2/log'>})
              ]
            )
          ]
        )
      body: (command.DoGroup children:[(C {<sleep>} {<1>})])
    )
    (C {<head>} {<-n>} {<1>} {<Id.Lit_ArrayLhsOpen 'svc['> <0-9> <Id.Lit_RBracket ']'> <'/output'>})
    (C {<cat>} {<svscan.log>})
    (C {<rm>} {<-r>} {<svc0>} {<svc1>} {<svc2>} {<service>})
  ]
)