(command.CommandList
  children: [
    (C {(mkdir)} {(service)} {(svc0)} {(svc1)} {(svc2)} {(svc2/log)})
    (command.Simple
      words: [{(catexe)} {(svc0/run)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:20)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 26
          stdin_parts: [('#!/bin/sh\n') ('echo svc0 ran >> output\n')]
        )
      ]
    )
    (command.Simple
      words: [{(catexe)} {(svc1/run)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:32)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 38
          stdin_parts: [('#!/bin/sh\n') ('echo svc1 ran\n')]
        )
      ]
    )
    (command.Simple
      words: [{(catexe)} {(svc1/log)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:44)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 50
          stdin_parts: [('#!/bin/sh\n') ('exec cat > output\n')]
        )
      ]
    )
    (command.Simple
      words: [{(catexe)} {(svc2/run)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:56)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 62
          stdin_parts: [('#!/bin/sh\n') ('echo svc2 ran\n')]
        )
      ]
    )
    (command.Simple
      words: [{(catexe)} {(svc2/log/run)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:68)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 74
          stdin_parts: [('#!/bin/sh\n') ('exec cat > ../output\n')]
        )
      ]
    )
    (C {(ln)} {(-s)} 
      {
        (command_sub
          left_token: (Token id:Id.Left_Backtick val:'`' span_id:80)
          command_list: (command.CommandList children:[(C {(pwd)})])
        ) (/svc) (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']')
      } {(service/)}
    )
    (command.Sentence
      child: 
        (command.Simple
          words: [
            {(svscan)}
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:95)
                command_list: (command.CommandList children:[(C {(pwd)})])
              ) (/service)
            }
          ]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:102)
              fd: -1
              arg_word: {(svscan.log)}
            )
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:105)
              fd: 2
              arg_word: {(1)}
            )
          ]
        )
      terminator: (Token id:Id.Op_Amp val:'&' span_id:108)
    )
    (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: (Token id:Id.KW_Until val:until span_id:114)
      cond: [
        (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.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:157)
          fd: -1
          arg_word: {(/dev/null)}
        )
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'2>&' span_id:160) fd:2 arg_word:{(1)})
      ]
    )
    (C {(svc)} {(-dx)} {(Id.Lit_ArrayLhsOpen 'svc[') (0-9) (Id.Lit_RBracket ']')} {(svc2/log)})
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:174)
      cond: [
        (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)})
  ]
)