(List (= scope= flags=0 words=[] bindings=[('TPUT', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS which]} {[LIT_CHARS tput]})]})]) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -x]} {[DQ [VarSub TPUT]]}) (Com {[VarSub TPUT]} {[LIT_CHARS setaf]} {[LIT_CHARS 1]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) ) (List (= scope= flags=0 words=[] bindings=[('RED', {[DQ [ComSub (Com {[VarSub TPUT]} {[LIT_CHARS setaf]} {[LIT_CHARS 1]})]]})]) (= scope= flags=0 words=[] bindings=[('NORMAL', {[DQ [ComSub (Com {[VarSub TPUT]} {[LIT_CHARS op]})]]})]) ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('RED', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('NORMAL', {[SQ ]})]) ) ) (FunctionDef warn [] (Com {[LIT_CHARS echo]} {[DQ [VarSub RED][LIT_CHARS "WARNING:"][VarSub NORMAL][LIT_CHARS " "][VarSub @]]}) ) )