(List (= scope= flags=1 words=[] bindings=[('LC_ALL', {[LIT_CHARS C]})]) (FunctionDef show_diff [] (List (= scope= flags=0 words=[] bindings=[('tmp1', {[ComSub (Com {[LIT_CHARS mktemp]})]})]) (= scope= flags=0 words=[] bindings=[('tmp2', {[ComSub (Com {[LIT_CHARS mktemp]})]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub 1]]} < (FilenameRedirectNode filename={[DQ [VarSub tmp1]]} "> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [VarSub 2]]} < (FilenameRedirectNode filename={[DQ [VarSub tmp2]]} "> 1), > ) (Pipeline (Com {[LIT_CHARS diff]} {[LIT_CHARS -U]} {[LIT_CHARS 1]} {[DQ [VarSub tmp1]]} {[DQ [VarSub tmp2]]} ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[LIT_CHARS 1d]} {[LIT_CHARS -e]} {[LIT_CHARS 2d]} {[LIT_CHARS -e]} {[SQ ]} ) ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub tmp1]]} {[DQ [VarSub tmp2]]} ) ) ) (= scope= flags=0 words=[] bindings=[('ret', {[LIT_CHARS 0]})]) (For s [{[LIT_CHARS crosh] [LIT_OTHER "*"]}]) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Checking "][VarSub s]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS egrep]} {[LIT_CHARS -hn]} {[SQ ]} {[VarSub s]} ) (= scope= flags=0 words=[] bindings=[('ret', {[LIT_CHARS 1]})]) ) (AndOr OP_OR_IF (Com {[LIT_CHARS bash]} {[LIT_CHARS -n]} {[VarSub s]} ) (= scope= flags=0 words=[] bindings=[('ret', {[LIT_CHARS 1]})]) ) (For help [{[ComSub (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[DQ [LIT_CHARS "/^[A-Z_]*HELP[A-Z_]*='"][LIT_OTHER "$"][LIT_CHARS "/s:='::p"]]} {[DQ [VarSub s]]})]}]) (List (= scope= flags=0 words=[] bindings=[('cmds', {[ComSub (Pipeline (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[DQ [LIT_CHARS "/^"][VarSub help][LIT_CHARS "=/,/'"][LIT_OTHER "$"][LIT_CHARS /p]]} {[DQ [VarSub s]]}) (Com {[LIT_CHARS egrep]} {[LIT_CHARS -o]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('sorted', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub cmds]]}) (Com {[LIT_CHARS sort]}) )]})]) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[VarSub cmds]} {[DQ [VarSub sorted]]}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "ERROR: "][VarSub help][LIT_CHARS " is not sorted:"]]} ) (Com {[LIT_CHARS show_diff]} {[DQ [VarSub cmds]]} {[DQ [VarSub sorted]]} ) (= scope= flags=0 words=[] bindings=[('ret', {[LIT_CHARS 1]})]) ) ) ) ) (If (Com {[LIT_CHARS grep]} {[LIT_CHARS -hn]} {[SQ ]} {[VarSub s]} ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "ERROR: The above commands need to use () for their bodies, not {}:\n"][LIT_CHARS " cmd_foo() (\n"][LIT_CHARS " ...\n"][LIT_CHARS " )\n"][LIT_CHARS "\n"]]} 0), > ) (= scope= flags=0 words=[] bindings=[('ret', {[LIT_CHARS 1]})]) ) ) (If (Com {[LIT_CHARS grep]} {[LIT_CHARS -hn]} {[SQ ]} {[VarSub s]} ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "ERROR: The above commands need a space after the ()\n"][LIT_CHARS "\n"]]} 0), > ) (= scope= flags=0 words=[] bindings=[('ret', {[LIT_CHARS 1]})]) ) ) (If (Com {[LIT_CHARS grep]} {[LIT_CHARS -hn]} {[SQ ">]} {[VarSub s]} ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "ERROR: The &> construct is a bashism. Please fix it like so:\n"][LIT_CHARS " before: some_command &> /dev/null\n"][LIT_CHARS " after : some_command >/dev/null 2>&1\n"][LIT_CHARS " Note: Some commands (like grep) have options to silence\n"][LIT_CHARS " their output. Use that rather than redirection.\n"][LIT_CHARS "\n"]]} 0), > ) (= scope= flags=0 words=[] bindings=[('ret', {[LIT_CHARS 1]})]) ) ) (If (Com {[LIT_CHARS grep]} {[LIT_CHARS -hn]} {[SQ ]} {[VarSub s]} ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "ERROR: The [[...]] construct is a bashism. Please stick to [...].\n"][LIT_CHARS "\n"]]} 0), > ) (= scope= flags=0 words=[] bindings=[('ret', {[LIT_CHARS 1]})]) ) ) ) ) (Com {[LIT_CHARS exit]} {[VarSub ret]} ) )