(command.CommandList children: [ (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:ntest) op:assign_op.Equal rhs:{<1>} spids:[4])] ) (command.Case to_match: {(DQ (${ Id.VSub_Name dir))} arms: [ (case_arm pat_list: [{<'/'> <Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:maindir) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name dir) <'/../..'>)} spids: [23] ) ] ) ] spids: [18 20 32 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:maindir) op: assign_op.Equal rhs: { (DQ (command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>})) <'/'> (${ Id.VSub_Name dir) <'/../..'> ) } spids: [38] ) ] ) ] spids: [34 35 53 -1] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fstest) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name maindir) <'/pjdfstest'>)} spids: [57] ) ] ) (C {<.>} {(${ Id.VSub_Name maindir) <'/tests/conf'>}) (command.ShFunction name: expect body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:e) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} spids: [80] ) ] ) (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple words: [{(${ Id.VSub_Name fstest)} {($ Id.VSub_Star '$*')}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (C {<tail>} {<-1>}) ] negated: F ) ) } spids: [91] ) ] ) (command.Pipeline children: [ (C {<echo>} {(DQ (${ Id.VSub_Name r))}) (C {(${ Id.VSub_Name GREP)} {<-Eq>} {(SQ <'^'>) (${ Id.VSub_Name e) (SQ <'$'>)}) ] negated: F ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ (${ Id.VSub_Name todomsg))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<echo>} {(DQ <'ok '> (${ Id.VSub_Name ntest))})] spids: [155 170] ) ] else_action: [ (C {<echo>} { (DQ <'ok '> (${ Id.VSub_Name ntest) <' # TODO '> (${ Id.VSub_Name todomsg)) } ) ] ) ] spids: [139 152] ) ] else_action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ (${ Id.VSub_Name todomsg))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} { (DQ <'not ok '> (${ Id.VSub_Name ntest) <' - tried \''> ($ Id.VSub_Star '$*') <'\', expected '> (${ Id.VSub_Name e) <', got '> (${ Id.VSub_Name r) ) } ) ] spids: [206 221] ) ] else_action: [ (C {<echo>} { (DQ <'not ok '> (${ Id.VSub_Name ntest) <' # TODO '> (${ Id.VSub_Name todomsg)) } ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:todomsg) op: assign_op.Equal rhs: {(DQ )} spids: [267] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ntest) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: <Id.Lit_ArithVarLike ntest> right: {<Id.Lit_Digits 1>} ) ) } spids: [272] ) ] ) ] ) ) (command.ShFunction name: jexpect body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:s) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} spids: [290] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:d) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 2))} spids: [298] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:e) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 3))} spids: [306] ) ] ) (C {<shift>} {<3>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<jail>} {<-s>} {(${ Id.VSub_Name s)} {<'/'>} {<pjdfstest>} {<127.0.0.1>} {<'/bin/sh'>} {<-c>} { (DQ <'cd '> (${ Id.VSub_Name d) <' && '> (${ Id.VSub_Name fstest) <' '> ($ Id.VSub_Star '$*') <' 2>/dev/null'> ) } ) (C {<tail>} {<-1>}) ] negated: F ) ) } spids: [319] ) ] ) (command.Pipeline children: [ (C {<echo>} {(DQ (${ Id.VSub_Name r))}) (C {(${ Id.VSub_Name GREP)} {<-Eq>} {(SQ <'^'>) (${ Id.VSub_Name e) (SQ <'$'>)}) ] negated: F ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ (${ Id.VSub_Name todomsg))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<echo>} {(DQ <'ok '> (${ Id.VSub_Name ntest))})] spids: [406 421] ) ] else_action: [ (C {<echo>} { (DQ <'ok '> (${ Id.VSub_Name ntest) <' # TODO '> (${ Id.VSub_Name todomsg)) } ) ] ) ] spids: [390 403] ) ] else_action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ (${ Id.VSub_Name todomsg))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} { (DQ <'not ok '> (${ Id.VSub_Name ntest) <' - tried \''> ($ Id.VSub_Star '$*') <'\', expected '> (${ Id.VSub_Name e) <', got '> (${ Id.VSub_Name r) ) } ) ] spids: [457 472] ) ] else_action: [ (C {<echo>} { (DQ <'not ok '> (${ Id.VSub_Name ntest) <' # TODO '> (${ Id.VSub_Name todomsg)) } ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:todomsg) op: assign_op.Equal rhs: {(DQ )} spids: [518] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ntest) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: <Id.Lit_ArithVarLike ntest> right: {<Id.Lit_Digits 1>} ) ) } spids: [523] ) ] ) ] ) ) (command.ShFunction name: test_check body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Star '$*')} {<Id.Lit_RBracket ']'>}) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ (${ Id.VSub_Name todomsg))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<echo>} {(DQ <'ok '> (${ Id.VSub_Name ntest))})] spids: [553 568] ) ] else_action: [ (C {<echo>} { (DQ <'ok '> (${ Id.VSub_Name ntest) <' # TODO '> (${ Id.VSub_Name todomsg)) } ) ] ) ] spids: [541 550] ) ] else_action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ (${ Id.VSub_Name todomsg))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<echo>} {(DQ <'not ok '> (${ Id.VSub_Name ntest))})] spids: [604 619] ) ] else_action: [ (C {<echo>} { (DQ <'not ok '> (${ Id.VSub_Name ntest) <' # TODO '> (${ Id.VSub_Name todomsg)) } ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:todomsg) op: assign_op.Equal rhs: {(DQ )} spids: [655] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ntest) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: <Id.Lit_ArithVarLike ntest> right: {<Id.Lit_Digits 1>} ) ) } spids: [660] ) ] ) ] ) ) (command.ShFunction name: todo body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name os))} {<Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Number 1))} {<-o>} {(DQ (${ Id.VSub_Name os) <':'> (${ Id.VSub_Name fs))} {<Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:todomsg) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 2))} spids: [722] ) ] ) ] spids: [678 719] ) ] ) ] ) ) (command.ShFunction name: namegen body: (BraceGroup children: [ (C {<echo>} { (DQ <pjdfstest_> (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple words: [ {<dd>} {<Id.Lit_VarLike 'if='> <'/dev/urandom'>} {<Id.Lit_VarLike 'bs='> <1k>} {<Id.Lit_VarLike 'count='> <1>} ] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (C {<openssl>} {<md5>}) (C {<awk>} {(SQ <'{print $NF}'>)}) ] negated: F ) ) ) } ) ] ) ) (command.ShFunction name: namegen_len body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:len) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} spids: [789] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: {(DQ )} spids: [798] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_Colon ':'>}) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:namepart) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Simple words: [ {<dd>} {<Id.Lit_VarLike 'if='> <'/dev/urandom'>} {<Id.Lit_VarLike 'bs='> <64>} {<Id.Lit_VarLike 'count='> <1>} ] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (C {<openssl>} {<md5>}) (C {<awk>} {(SQ <'{print $NF}'>)}) ] negated: F ) ) ) } spids: [811] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name name) (${ Id.VSub_Name namepart))} spids: [847] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:curlen) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<printf>} {(DQ <'%s'>)} {(DQ (${ Id.VSub_Name name))}) (C {<wc>} {<-c>}) ] negated: F ) ) } spids: [858] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name curlen)} {<-lt>} {(${ Id.VSub_Name len)} {<Id.Lit_RBracket ']'>} ) (command.ControlFlow token: <Id.ControlFlow_Break break> ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<echo>} {(DQ (${ Id.VSub_Name name))}) (C {<cut>} {<-b>} {<-> (${ Id.VSub_Name len)}) ] negated: F ) ) } spids: [904] ) ] ) (C {<printf>} {(DQ <'%s'>)} {(DQ (${ Id.VSub_Name name))}) ] ) ) (command.ShFunction name: namegen_max body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name_max) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {(${ Id.VSub_Name fstest)} {<pathconf>} {<.>} {<_PC_NAME_MAX>}) ) } spids: [960] ) ] ) (C {<namegen_len>} {(${ Id.VSub_Name name_max)}) ] ) ) (command.ShFunction name: dirgen_max body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name_max) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {(${ Id.VSub_Name fstest)} {<pathconf>} {<.>} {<_PC_NAME_MAX>}) ) } spids: [1001] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:complen) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Slash left: <Id.Lit_ArithVarLike name_max> right: {<Id.Lit_Digits 2>} ) ) } spids: [1017] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path_max) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {(${ Id.VSub_Name fstest)} {<pathconf>} {<.>} {<_PC_PATH_MAX>}) ) } spids: [1026] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path_max) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: <Id.Lit_ArithVarLike path_max> right: {<Id.Lit_Digits 1>} ) ) } spids: [1046] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: {(DQ )} spids: [1056] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_Colon ':'>}) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name name) (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<namegen_len>} {(${ Id.VSub_Name complen)}) ) <'/'> ) } spids: [1069] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:curlen) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<printf>} {(DQ <'%s'>)} {(DQ (${ Id.VSub_Name name))}) (C {<wc>} {<-c>}) ] negated: F ) ) } spids: [1087] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name curlen)} {<-lt>} {(${ Id.VSub_Name path_max)} {<Id.Lit_RBracket ']'>} ) (command.ControlFlow token: <Id.ControlFlow_Break break> ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<echo>} {(DQ (${ Id.VSub_Name name))}) (C {<cut>} {<-b>} {<-> (${ Id.VSub_Name path_max)}) ] negated: F ) ) } spids: [1133] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<echo>} {(DQ (${ Id.VSub_Name name))}) (C {<sed>} {<-E>} {(SQ <'s@/$@x@'>)}) ] negated: F ) ) } spids: [1158] ) ] ) (C {<printf>} {(DQ <'%s'>)} {(DQ (${ Id.VSub_Name name))}) ] ) ) (command.ShFunction name: quick_exit body: (BraceGroup children: [ (C {<echo>} {(DQ <1..1>)}) (C {<echo>} {(DQ <'ok 1'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] ) ) (command.ShFunction name: supported body: (BraceGroup children: [ (command.Case to_match: {(DQ (${ Id.VSub_Number 1))} arms: [ (case_arm pat_list: [{<lchmod>}] action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name os))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <FreeBSD>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [1247 1267] ) ] ) ] spids: [1243 1244 1278 -1] ) (case_arm pat_list: [{<chflags>}] action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name os))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <FreeBSD>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [1285 1305] ) ] ) ] spids: [1281 1282 1316 -1] ) (case_arm pat_list: [{<chflags_SF_SNAPSHOT>}] action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name os))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <FreeBSD>)} {<-o>} {(DQ (${ Id.VSub_Name fs))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <UFS>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [1323 1358] ) ] ) ] spids: [1319 1320 1369 -1] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) ] ) ) (command.ShFunction name: require body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<supported>} {(${ Id.VSub_Number 1)}) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Return return>)] spids: [1389 1398] ) ] ) (C {<quick_exit>}) ] ) ) (command.ShFunction name: create_file body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:type) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} spids: [1434] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 2))} spids: [1442] ) ] ) (command.Case to_match: {(DQ (${ Id.VSub_Name type))} arms: [ (case_arm pat_list: [{<none>}] action: [(command.ControlFlow token:<Id.ControlFlow_Return return>)] spids: [1462 1463 1469 -1] ) (case_arm pat_list: [{<regular>}] action: [(C {<expect>} {<0>} {<create>} {(${ Id.VSub_Name name)} {<0644>})] spids: [1472 1473 1489 -1] ) (case_arm pat_list: [{<dir>}] action: [(C {<expect>} {<0>} {<mkdir>} {(${ Id.VSub_Name name)} {<0755>})] spids: [1492 1493 1509 -1] ) (case_arm pat_list: [{<fifo>}] action: [(C {<expect>} {<0>} {<mkfifo>} {(${ Id.VSub_Name name)} {<0644>})] spids: [1512 1513 1529 -1] ) (case_arm pat_list: [{<block>}] action: [ (C {<expect>} {<0>} {<mknod>} {(${ Id.VSub_Name name)} {<b>} {<0644>} {<1>} {<2>}) ] spids: [1532 1533 1555 -1] ) (case_arm pat_list: [{<char>}] action: [ (C {<expect>} {<0>} {<mknod>} {(${ Id.VSub_Name name)} {<c>} {<0644>} {<1>} {<2>}) ] spids: [1558 1559 1581 -1] ) (case_arm pat_list: [{<socket>}] action: [(C {<expect>} {<0>} {<bind>} {(${ Id.VSub_Name name)})] spids: [1584 1585 1599 -1] ) (case_arm pat_list: [{<symlink>}] action: [(C {<expect>} {<0>} {<symlink>} {<test>} {(${ Id.VSub_Name name)})] spids: [1602 1603 1619 -1] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-n>} {(DQ (${ Id.VSub_Number 3))} {<-a>} {<-n>} {(DQ (${ Id.VSub_Number 4))} {<-a>} {<-n>} {(DQ (${ Id.VSub_Number 5))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<expect>} {<0>} {<lchmod>} {(${ Id.VSub_Name name)} {(${ Id.VSub_Number 3)}) (C {<expect>} {<0>} {<lchown>} {(${ Id.VSub_Name name)} {(${ Id.VSub_Number 4)} {(${ Id.VSub_Number 5)} ) ] spids: [1625 1660] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-n>} {(DQ (${ Id.VSub_Number 3))} {<-a>} {<-n>} {(DQ (${ Id.VSub_Number 4))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<expect>} {<0>} {<lchown>} {(${ Id.VSub_Name name)} {(${ Id.VSub_Number 3)} {(${ Id.VSub_Number 4)} ) ] spids: [1697 1722] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-n>} {(DQ (${ Id.VSub_Number 3))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<expect>} {<0>} {<lchmod>} {(${ Id.VSub_Name name)} {(${ Id.VSub_Number 3)}) ] spids: [1744 1759] ) ] ) ] ) ) (command.ShFunction name: has_mount_option body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'IFS='> <Id.Lit_Comma ','>}) (C {<local>} {<mount_opt>}) (C {<local>} {<Id.Lit_VarLike 'mount_option_search='> ($ Id.VSub_Number '$1')}) (command.ForEach iter_names: [mount_opt] iterable: (for_iter.Words words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<mount>} {<-d>} {<-p>}) (C {<awk>} {(SQ <'$2 == "'>) ($ Id.VSub_DollarName '$mountpoint') (SQ <'" { print $4 }'>) } ) ] negated: F ) ) } ] ) body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$mount_opt'))} {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$mount_option_search'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [1869 1886] ) ] ) ] ) ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (command.ShFunction name: requires_exec body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<has_mount_option>} {<noexec>}) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'1..0 # SKIP filesystem mounted with -o noexec'>)}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<0>} ) ] spids: [1917 1924] ) ] ) ] ) ) ] )