(List (FunctionDef err_exit [] (List (Com {[LIT_CHARS print]} {[LIT_CHARS -u2]} {[LIT_CHARS -n]} {[DQ [\ LIT_ESCAPED_CHAR "\\t"]]}) (Com {[LIT_CHARS print]} {[LIT_CHARS -u2]} {[LIT_CHARS -r]} {[VarSub Command] [LIT_OTHER "["] [VarSub 1] [LIT_OTHER "]"] [LIT_OTHER ":"]} {[DQ [VarSub @ transform_ops=[Slice {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 2]}} None]]]}) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "Errors+="] [LIT_CHARS 1] =}) ) ) (Com {[LIT_CHARS alias]} {[LIT_VAR_LIKE "err_exit="] [SQ ] =}) (= scope= flags=0 words=[] bindings=[('Command', {[VarSub 0 transform_ops=[VS_UNARY_DPOUND {[LIT_CHARS "*"] [LIT_SLASH /]}]]})]) (Com {[LIT_CHARS integer]} {[LIT_VAR_LIKE "Errors="] [LIT_CHARS 0] =}) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('tmp', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS -dt]})]})]) (List (Com {[LIT_CHARS err_exit]} {[LIT_CHARS mktemp]} {[LIT_CHARS -dt]} {[LIT_CHARS failed]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (Com {[LIT_CHARS trap]} {[DQ [LIT_CHARS "cd /; rm -rf "][VarSub tmp]]} {[LIT_CHARS EXIT]}) (Com {[LIT_CHARS alias]} {[LIT_VAR_LIKE "foo="] [SQ ] =}) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[ComSub (Com {[LIT_CHARS foo]})]} {[LIT_CHARS hello]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[ComSub (Com {[LIT_CHARS foo]} {[LIT_CHARS world]})]} {[SQ ]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS alias]} {[LIT_VAR_LIKE "foo="] [SQ ] =}) (Com {[LIT_CHARS alias]} {[LIT_VAR_LIKE "bar="] [LIT_CHARS world] =}) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[ComSub (Com {[LIT_CHARS foo]} {[LIT_CHARS bar]})]} {[SQ ]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[ComSub (Com {[LIT_CHARS foo]} {[\ LIT_ESCAPED_CHAR "\\b"] [LIT_CHARS ar]})]} {[SQ ]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS alias]} {[LIT_VAR_LIKE "bar="] [SQ ] =}) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[ComSub (Com {[LIT_CHARS bar]})]} {[SQ ]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[ComSub (Com {[LIT_CHARS alias]} {[LIT_CHARS bar]})]} {[DQ [LIT_CHARS "bar='foo world'"]]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS unalias]} {[LIT_CHARS foo]}) (Com {[LIT_CHARS err_exit]} {[DQ [LIT_CHARS "unalias foo failed"]]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS alias]} {[LIT_CHARS foo]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS err_exit]} {[DQ [LIT_CHARS "alias for non-existent alias foo returns true"]]}) ) (Com {[LIT_CHARS unset]} {[LIT_CHARS bar]}) (Com {[LIT_CHARS alias]} {[LIT_VAR_LIKE "bar="] [DQ [LIT_CHARS "print foo"][VarSub bar]] =}) (= scope= flags=0 words=[] bindings=[('bar', {[LIT_CHARS bar]})]) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[ComSub (Com {[LIT_CHARS bar]})]} {[LIT_CHARS foo]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS unset]} {[LIT_CHARS bar]}) (Com {[LIT_CHARS alias]} {[LIT_VAR_LIKE "bar="] [SQ ] =}) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[VarSub bar]} {[SQ ]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS alias]} {[LIT_OTHER "!"] [LIT_OTHER "!"] [LIT_OTHER "="] [LIT_CHARS print]}) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_OTHER "!"] [LIT_OTHER "!"]} {[LIT_CHARS hello]})]} {[LIT_CHARS hello]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS alias]} {[LIT_VAR_LIKE "foo="] [LIT_CHARS echo] =}) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[ComSub (Com {[LIT_CHARS print]} {[DQ [ComSub (Com {[LIT_CHARS foo]} {[LIT_CHARS bar]})]]})]} {[LIT_CHARS bar]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Subshell (Com {[LIT_CHARS unalias]} {[LIT_CHARS foo]}) ) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS foo]} {[LIT_CHARS bar]})]} {[LIT_CHARS bar]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS builtin]} {[LIT_CHARS -d]} {[LIT_CHARS rm]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (If (Com {[LIT_CHARS whence]} {[LIT_CHARS rm]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (List (AndOr OP_AND_IF (DBracket {B! {B1 UNARY_STRING_n {[ComSub (Pipeline (Com {[LIT_CHARS alias]} {[LIT_CHARS -t]}) (Com {[LIT_CHARS grep]} {[LIT_VAR_LIKE "rm="] =}) )]}}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (= scope= flags=0 words=[] bindings=[('PATH', {[VarSub PATH]})]) (AndOr OP_AND_IF (DBracket {B1 UNARY_STRING_n {[ComSub (Pipeline (Com {[LIT_CHARS alias]} {[LIT_CHARS -t]}) (Com {[LIT_CHARS grep]} {[LIT_VAR_LIKE "rm="] =}) )]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) ) ) (If (AndOr OP_AND_IF (Com {[LIT_CHARS hash]} {[LIT_CHARS -r]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (DBracket {B! {B1 UNARY_STRING_n {[ComSub (Com {[LIT_CHARS hash]})]}}}) ) (List (= scope= flags=0 words=[] bindings=[('PATH', {[VarSub tmp] [LIT_OTHER ":"] [LIT_CHARS /bin] [LIT_OTHER ":"] [LIT_CHARS /usr/bin]})]) (For i [{[LIT_CHARS foo]}, {[LIT_CHARS -foo]}, {[LIT_CHARS --]}]) (List (Com {[LIT_CHARS print]} {[SQ ]} < (FilenameRedirectNode filename={[VarSub tmp] [LIT_CHARS /] [VarSub i]} "> 1), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[VarSub tmp] [LIT_CHARS /] [VarSub i]}) (AndOr OP_OR_IF (Com {[LIT_CHARS hash]} {[LIT_CHARS -r]} {[LIT_CHARS --]} {[VarSub i]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS err_exit]} {[DQ [LIT_CHARS "hash -r -- "][VarSub i][LIT_CHARS " failed"]]}) ) (AndOr OP_OR_IF (DBracket {B2 BINARY_STRING_EQUAL {[ComSub (Com {[LIT_CHARS hash]})]} {[VarSub i] [LIT_EQUAL "="] [VarSub tmp] [LIT_CHARS /] [VarSub i]}}) (Com {[LIT_CHARS err_exit]} {[DQ [LIT_CHARS "hash -r -- "][VarSub i][LIT_CHARS " failed, expected "][VarSub i][LIT_CHARS "="][VarSub tmp][LIT_CHARS /][VarSub i][LIT_CHARS ", got "][ComSub (Com {[LIT_CHARS hash]})]]}) ) ) ) ) (ElseTrue) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Subshell (Com {[LIT_CHARS alias]} {[LIT_OTHER ":"] [LIT_VAR_LIKE "pr="] [LIT_CHARS print]}) ) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Subshell (Com {[LIT_CHARS alias]} {[LIT_CHARS p] [LIT_OTHER ":"] [LIT_VAR_LIKE "r="] [LIT_CHARS print]}) ) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS unalias]} {[LIT_CHARS no_such_alias]}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS exit]} {[ArithSub {A3 AS_OP_QMARK {A2 AS_OP_LESS {A Atom NODE_ARITH_WORD {[VarSub Errors]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 125]}}} {A Atom NODE_ARITH_WORD {[VarSub Errors]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 125]}}}]}) )