(CommandList children: [ (FuncDef name: err_exit body: (BraceGroup children: [ (C {(print)} {(-u2)} {(-n)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\t">))}) (C {(print)} {(-u2)} {(-r)} {($ VSub_Name "$Command") (Lit_Other ":")} {(DQ ($ VSub_At "$@"))}) (C {(let)} {(Lit_VarLike "Errors+=") (1)}) ] spids: [61] ) spids: [57 60] ) (C {(alias)} {(Lit_VarLike "err_exit=") (SQ <"err_exit $LINENO">)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:Command) op: Equal rhs: { (BracedVarSub token: <VSub_Number 0> suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{("*") (Lit_Slash /)}) spids: [105 110] ) } spids: [104] ) ] spids: [104] ) (C {(integer)} {(Lit_VarLike "Errors=") (0)}) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tmp) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(mktemp)} {(-dt)})]) left_token: <Left_CommandSub "$("> spids: [119 123] ) } spids: [118] ) ] spids: [118] ) (BraceGroup children: [ (Sentence child: (C {(err_exit)} {(mktemp)} {(-dt)} {(failed)}) terminator: <Op_Semi ";"> ) (Sentence child:(C {(exit)} {(1)}) terminator:<Op_Semi ";">) ] spids: [127] ) ] op_id: Op_DPipe ) (C {(trap)} {(DQ ("cd /; rm -rf ") ($ VSub_Name "$tmp"))} {(EXIT)}) (If arms: [ (if_arm cond: [(C {($ VSub_Name "$SHELL")} {(-c)} {(SQ <"[[ ~root == /* ]]">)})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(print)} {(-r)} {(--)} {(TildeSubPart prefix:root)})] ) left_token: <Left_CommandSub "$("> spids: [168 177] ) } spids: [167] ) ] spids: [167] ) (AndOr children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_Name "$x")} right: {(Lit_Tilde "~") (root)} ) ) (C {(err_exit)} {(SQ <"~user expanded in subshell prevent ~user from working">)}) ] op_id: Op_DPipe ) ] spids: [-1 165] ) ] spids: [-1 199] ) (FuncDef name: home body: (BraceGroup children: [ (C {(typeset)} {(Lit_VarLike "IFS=") (Lit_Other ":")} {(Lit_VarLike "pwd=") (/etc/passwd)}) (C {(set)} {(-o)} {(noglob)}) (If arms: [ (if_arm cond: [ (AndOr children: [ (DBracket expr: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name "$pwd")}) ) (SimpleCommand words: [ {(grep)} {(-c)} {(DQ ("^") ($ VSub_Number "$1") (":"))} {($ VSub_Name "$pwd")} ] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(/dev/null)} spids: [252] ) ] ) ] op_id: Op_DAmp ) ] action: [ (C {(set)} {(--)} { (CommandSubPart command_list: (CommandList children: [ (C {(grep)} {(DQ ("^") ($ VSub_Number "$1") (":"))} {($ VSub_Name "$pwd")} ) ] ) left_token: <Left_CommandSub "$("> spids: [263 273] ) } ) (C {(print)} {(-r)} {(--)} {(DQ ($ VSub_Number "$6"))}) ] spids: [-1 257] ) ] else_action: [(C {(print)} {(.)})] spids: [287 294] ) ] spids: [209] ) spids: [202 205] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:OLDPWD) op:Equal rhs:{(/bin)} spids:[299])] spids: [299] ) (If arms: [ (if_arm cond: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {(Lit_Tilde "~")} right: {($ VSub_Name "$HOME")} ) ) ] action: [(C {(err_exit)} {(SQ <"~">)} {(not)} {($ VSub_Name "$HOME")})] spids: [-1 314] ) ] spids: [-1 326] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(TildeSubPart prefix:"")} spids:[328])] spids: [328] ) (If arms: [ (if_arm cond: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {($ VSub_Name "$x")} right: {($ VSub_Name "$HOME")} ) ) ] action: [ (C {(err_exit)} {(Lit_VarLike "x=") (Lit_Tilde "~")} {(not)} {($ VSub_Name "$HOME")}) ] spids: [-1 343] ) ] spids: [-1 354] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: {(x) (Lit_Other ":") (Lit_Tilde "~")} spids: [356] ) ] spids: [356] ) (If arms: [ (if_arm cond: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {($ VSub_Name "$x")} right: {(x) (Lit_Other ":") ($ VSub_Name "$HOME")} ) ) ] action: [ (C {(err_exit)} {(Lit_VarLike "x=") (x) (Lit_Other ":") (Lit_Tilde "~")} {(not)} {(x) (Lit_Other ":") ($ VSub_Name "$HOME")} ) ] spids: [-1 375] ) ] spids: [-1 390] ) (If arms: [ (if_arm cond: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {(Lit_Tilde "~") (Lit_Other "+")} right: {($ VSub_Name "$PWD")} ) ) ] action: [(C {(err_exit)} {(SQ <"~">)} {(not)} {($ VSub_Name "$PWD")})] spids: [-1 405] ) ] spids: [-1 417] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(TildeSubPart prefix:"+")} spids:[419])] spids: [419] ) (If arms: [ (if_arm cond: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {($ VSub_Name "$x")} right: {($ VSub_Name "$PWD")} ) ) ] action: [ (C {(err_exit)} {(Lit_VarLike "x=") (Lit_Tilde "~") (Lit_Other "+")} {(not)} {($ VSub_Name "$PWD")} ) ] spids: [-1 435] ) ] spids: [-1 447] ) (If arms: [ (if_arm cond: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {(Lit_Tilde "~") (-)} right: {($ VSub_Name "$OLDPWD")} ) ) ] action: [(C {(err_exit)} {(SQ <"~">)} {(not)} {($ VSub_Name "$PWD")})] spids: [-1 462] ) ] spids: [-1 474] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(TildeSubPart prefix:-)} spids:[476])] spids: [476] ) (If arms: [ (if_arm cond: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {($ VSub_Name "$x")} right: {($ VSub_Name "$OLDPWD")} ) ) ] action: [ (C {(err_exit)} {(Lit_VarLike "x=") (Lit_Tilde "~") (-)} {(not)} {($ VSub_Name "$OLDPWD")}) ] spids: [-1 492] ) ] spids: [-1 504] ) (ForEach iter_name: u iter_words: [{(root)} {(Administrator)}] do_arg_iter: False body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:h) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(home)} {($ VSub_Name "$u")})]) left_token: <Left_CommandSub "$("> spids: [519 523] ) } spids: [518] ) ] spids: [518] ) (If arms: [ (if_arm cond: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {($ VSub_Name "$h")} right: {(.)} ) ) ] action: [ (AndOr children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_ef left: {(Lit_Tilde "~") ($ VSub_Name "$u")} right: {($ VSub_Name "$h")} ) ) (C {(err_exit)} {(DQ ("~") ($ VSub_Name "$u") (" not ") ($ VSub_Name "$h"))}) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: {(Lit_Tilde "~") ($ VSub_Name "$u")} spids: [564] ) ] spids: [564] ) (AndOr children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_ef left: {($ VSub_Name "$x")} right: {($ VSub_Name "$h")} ) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: {(DQ ("~") ($ VSub_Name "$u") (" not ") ($ VSub_Name "$h"))} spids: [581] ) ] spids: [581] ) ] op_id: Op_DPipe ) (ControlFlow token:<ControlFlow_Break break>) ] spids: [-1 539] ) ] spids: [-1 593] ) ] spids: [516 595] ) spids: [511 -1] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: {(TildeSubPart prefix:g.r.emlin)} spids: [597] ) ] spids: [597] ) (If arms: [ (if_arm cond: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {($ VSub_Name "$x")} right: {(SQ <"~g.r.emlin">)} ) ) ] action: [ (C {(err_exit)} {(DQ ("x=~g.r.emlin failed -- expected '~g.r.emlin', got '") ($ VSub_Name "$x") ("'"))} ) ] spids: [-1 615] ) ] spids: [-1 625] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: {(TildeSubPart prefix:":~")} spids: [627] ) ] spids: [627] ) (If arms: [ (if_arm cond: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {($ VSub_Name "$x")} right: {(DQ ($ VSub_Name "$HOME") (":") ($ VSub_Name "$HOME"))} ) ) ] action: [ (C {(err_exit)} { (DQ ("x=~:~ failed, expected '") ($ VSub_Name "$HOME") (":") ($ VSub_Name "$HOME") ("', got '") ($ VSub_Name "$x") ("'") ) } ) ] spids: [-1 648] ) ] spids: [-1 662] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:HOME) op:Equal rhs:{(/)} spids:[664])] spids: [664] ) (AndOr children: [ (DBracket expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{(Lit_Tilde "~")} right:{(/)}) ) (C {(err_exit)} {(SQ <"~ should be /">)}) ] op_id: Op_DPipe ) (AndOr children: [ (DBracket expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{(Lit_Tilde "~") (/foo)} right:{(/foo)}) ) (C {(err_exit)} {(SQ <"~/foo should be /foo when ~==/">)}) ] op_id: Op_DPipe ) (SimpleCommand words: [{(print)} {(SQ <"print ~+"> <Lit_EscapedChar "\\n"> <"[[ $1 ]] && $0">)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{($ VSub_Name "$tmp") (/tilde)} spids:[712]) ] ) (C {(chmod)} {(Lit_Other "+") (x)} {($ VSub_Name "$tmp") (/tilde)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:nl) op: Equal rhs: {(SQ <Lit_EscapedChar "\\n">)} spids: [725] ) ] spids: [725] ) (AndOr children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: { (CommandSubPart command_list: (CommandList children: [(C {($ VSub_Name "$tmp") (/tilde)} {(foo)})] ) left_token: <Left_CommandSub "$("> spids: [732 737] ) } right: {(DQ ($ VSub_Name "$PWD") ($ VSub_Name "$nl") ($ VSub_Name "$PWD"))} ) redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[749])] ) (C {(err_exit)} {(SQ <"tilde fails inside a script run by name">)}) ] op_id: Op_DPipe ) (C {(exit)} { (ArithSubPart anode: (TernaryOp cond: (ArithBinary op_id: Arith_Less left: (ArithVarRef name:Errors) right: (ArithWord w:{(Lit_Digits 125)}) ) true_expr: (ArithVarRef name:Errors) false_expr: (ArithWord w:{(Lit_Digits 125)}) ) spids: [764 773] ) } ) ] )