(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:progname) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(basename)} {($ VSub_Number '$0')})]) left_token: <Left_CommandSub '$('> spids: [58 62] ) ) } spids: [56] ) ] spids: [56] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:usage) op: Equal rhs: {(DQ ('usage: ') (${ VSub_Name progname) (' [--ssh SSH] HOST COMMAND ...'))} spids: [66] ) ] spids: [66] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:help) op: Equal rhs: { (DQ ('Run a glibc test COMMAND on the remote machine HOST, via ssh,\n') ('preserving the current working directory, and respecting quoting.\n') ('\n') ("If the '--ssh SSH' flag is present, use SSH as the SSH command,\n") ("instead of ordinary 'ssh'.\n") ('\n') ("If the '--timeoutfactor FACTOR' flag is present, set TIMEOUTFACTOR on\n") ('the remote machine to the specified FACTOR.\n') ('\n') ('To use this to run glibc tests, invoke the tests as follows:\n') ('\n') (' ') (Lit_Other '$') (" make test-wrapper='ABSPATH/cross-test-ssh.sh HOST' tests\n") ('\n') ('where ABSPATH is the absolute path to this script, and HOST is the\n') ('name of the machine to connect to via ssh.\n') ('\n') ('If you need to connect to the test machine as a different user, you\n') ('may specify that just as you would to SSH:\n') ('\n') (' ') (Lit_Other '$') (" make test-wrapper='ABSPATH/cross-test-ssh.sh USER@HOST' tests\n") ('\n') ('Naturally, the remote user must have an appropriate public key, and\n') ('you will want to ensure that SSH does not prompt interactively for a\n') ('password on each connection.\n') ('\n') ("HOST and the build machines (on which 'make check' is being run) must\n") ('share a filesystem; all files needed by the tests must be visible at\n') ('the same paths on both machines.\n') ('\n') (${ VSub_Name progname) (' runs COMMAND in the same directory on the HOST that\n') (${ VSub_Name progname) (' itself is run in on the build machine.\n') ('\n') ('The command and arguments are passed to the remote host in a way that\n') ('avoids any further shell substitution or expansion, on the assumption\n') ('that the shell on the build machine has already done them\n') (appropriately.) ) } spids: [75] ) ] spids: [75] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ssh) op:Equal rhs:{(SQ <ssh>)} spids:[126])] spids: [126] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:timeoutfactor) op: Equal rhs: {($ VSub_Name '$TIMEOUTFACTOR')} spids: [131] ) ] spids: [131] ) (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-gt)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Case to_match: {(DQ ($ VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(DQ (--ssh))}] action: [ (C {(shift)}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-lt)} {(1)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Break break>)] spids: [16777215 182] ) ] spids: [16777215 188] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ssh) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [191] ) ] spids: [191] ) ] spids: [160 163 197 16777215] ) (case_arm pat_list: [{(DQ (--timeoutfactor))}] action: [ (C {(shift)}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-lt)} {(1)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Break break>)] spids: [16777215 223] ) ] spids: [16777215 229] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:timeoutfactor) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [232] ) ] spids: [232] ) ] spids: [201 204 238 16777215] ) (case_arm pat_list: [{(DQ (--help))}] action: [ (C {(echo)} {(DQ ($ VSub_Name '$usage'))}) (C {(echo)} {(DQ ($ VSub_Name '$help'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)}) ] spids: [242 245 267 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(ControlFlow token:<ControlFlow_Break break>)] spids: [271 272 278 16777215] ) ] spids: [150 156 281] ) (C {(shift)}) ] spids: [147 286] ) ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-lt)} {(1)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_Name '$usage'))}] redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (SimpleCommand words: [ {(echo)} {(DQ ("Type '") (${ VSub_Name progname) (" --help' for more detailed help."))} ] redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 302] ) ] spids: [16777215 333] ) (CommandList children: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:host) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [336] ) ] spids: [336] ) terminator: <Op_Semi ';'> ) (C {(shift)}) ] ) (FuncDef name: bourne_quote body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:arg) op:Equal spids:[361]) (assign_pair lhs:(LhsName name:qarg) op:Equal spids:[363]) ] spids: [359] ) (ForEach iter_name: arg iter_words: [{(DQ ($ VSub_At '$@'))}] do_arg_iter: F body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:qarg) op: Equal rhs: { (BracedVarSub token: <VSub_Name arg> suffix_op: (PatSub pat: {(EscapedLiteralPart token:<Lit_EscapedChar "\\'">)} replace: {(EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (EscapedLiteralPart token: <Lit_EscapedChar '\\\\'> ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) } do_all: T do_prefix: F do_suffix: F ) spids: [381 391] ) } spids: [380] ) ] spids: [380] ) (C {(echo)} {(-n)} {(DQ ("'") ($ VSub_Name '$qarg') ("' "))}) ] spids: [377 405] ) spids: [371 375] ) ] spids: [356] ) spids: [351 355] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:command) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(bourne_quote)} {(DQ ($ VSub_At '$@'))})]) left_token: <Left_CommandSub '$('> spids: [418 424] ) ) } spids: [416] ) ] spids: [416] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:command) op: Equal rhs: { (DQ ('cd ') (CommandSubPart command_list: (CommandList children: [(C {(bourne_quote)} {(DQ ($ VSub_Name '$PWD'))})] ) left_token: <Left_CommandSub '$('> spids: [434 440] ) ('\n') (${ VSub_Name command) ) } spids: [431] ) ] spids: [431] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$timeoutfactor'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:command) op: Equal rhs: { (DQ ('export TIMEOUTFACTOR=') (CommandSubPart command_list: (CommandList children: [(C {(bourne_quote)} {(DQ ($ VSub_Name '$timeoutfactor'))})] ) left_token: <Left_CommandSub '$('> spids: [468 474] ) ('\n') (${ VSub_Name command) ) } spids: [465] ) ] spids: [465] ) ] spids: [16777215 462] ) ] spids: [16777215 481] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:full_command) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(bourne_quote)} {(DQ (${ VSub_Name command))})] ) left_token: <Left_CommandSub '$('> spids: [498 506] ) ) } spids: [496] ) ] spids: [496] ) (C {($ VSub_Name '$ssh')} {(DQ ($ VSub_Name '$host'))} {(/bin/sh)} {(-c)} {(DQ ($ VSub_Name '$full_command'))} ) ] )