(command.CommandList
  children: [
    (C {<Id.KW_Set set>} {<-o>} {<nounset>})
    (C {<Id.KW_Set set>} {<-o>} {<pipefail>})
    (C {<Id.KW_Set set>} {<-o>} {<errexit>})
    (command.ShFunction
      name: deps
      body: 
        (BraceGroup
          children: [(C {<sudo>} {<apt>} {<install>} {<systemtap>} {<systemtap-sdt-dev>})]
        )
    )
    (command.ShFunction
      name: stap-deps
      body: (BraceGroup children:[(C {<sudo>} {<apt>} {<install>} {<libdw-dev>} {<libdw1>})])
    )
    (command.ShFunction
      name: download
      body: 
        (BraceGroup
          children: [
            (C {<wget>} {<--no-clobber>} {<--directory>} {<_tmp>} 
              {<https> <Id.Lit_Colon ':'> 
                <'//sourceware.org/systemtap/ftp/releases/systemtap-3.1.tar.gz'>
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: extract
      body: 
        (BraceGroup
          children: [
            (C {<cd>} {<_tmp>})
            (command.Simple
              words: [{<tar>} {<-x>} {<-z>}]
              redirects: [
                (redir
                  op: <Id.Redir_Less '<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: {<systemtap-3.1.tar.gz>}
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (C {<readonly>} {<Id.Lit_VarLike 'PY36='> <Id.Lit_TildeLike '~'> <'/src/languages/Python-3.6.1'>})
    (command.ShFunction
      name: build-python
      body: 
        (BraceGroup
          children: [
            (C {<pushd>} {($ Id.VSub_DollarName '$PY36')})
            (C {<'./configure'>} {<--with-dtrace>})
            (C {<make>} {<-j>} {<7>})
            (C {<popd>})
          ]
        )
    )
    (command.ShFunction
      name: elf
      body: 
        (BraceGroup
          children: [
            (C {<readelf>} {<-n>} 
              {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<which>} {<python3>}))}
            )
            (C {<echo>} {<--->})
            (C {<readelf>} {<-n>} {($ Id.VSub_DollarName '$PY36') <'/python'>})
          ]
        )
    )
    (command.ShFunction
      name: _demo
      body: 
        (BraceGroup
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'stp='> 
                (DQ ($ Id.VSub_DollarName '$PY36') <'/Lib/test/dtracedata/gc.stp'>)
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'py='> (DQ ($ Id.VSub_DollarName '$PWD') <'/test/sh_spec.py'>)}
            )
            (C {<pushd>} {($ Id.VSub_DollarName '$PY36')})
            (C {<stap>} {<-v>} {($ Id.VSub_DollarName '$stp')} {<-c>} 
              {(DQ <'./python '> ($ Id.VSub_DollarName '$py'))}
            )
            (C {<popd>})
          ]
        )
    )
    (command.ShFunction
      name: demo
      body: 
        (BraceGroup
          children: [
            (command.Sentence
              child: (C {<sudo>} {($ Id.VSub_Number '$0')} {<_demo>})
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (C {(DQ ($ Id.VSub_At '$@'))})
  ]
)