(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:progname) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<basename>} {($ Id.VSub_Number '$0')})] ) ) ) } spids: [56] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:usage) op: assign_op.Equal rhs: {(DQ <'usage: '> (${ Id.VSub_Name progname) <' [--ssh SSH] HOST COMMAND ...'>)} spids: [66] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:help) op: assign_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'> <' '> <Id.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'> <' '> <Id.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'> (${ Id.VSub_Name progname) <' runs COMMAND in the same directory on the HOST that\n'> (${ Id.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] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ssh) op: assign_op.Equal rhs: {(SQ <ssh>)} spids: [126] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:timeoutfactor) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$TIMEOUTFACTOR')} spids: [131] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>}) terminator: <Id.Op_Semi _> ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(DQ <--ssh>)}] action: [ (C {<shift>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-lt>} {<1>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)] spids: [169 182] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ssh) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [191] ) ] ) ] spids: [160 163 197 -1] ) (case_arm pat_list: [{(DQ <--timeoutfactor>)}] action: [ (C {<shift>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-lt>} {<1>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)] spids: [210 223] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:timeoutfactor) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [232] ) ] ) ] spids: [201 204 238 -1] ) (case_arm pat_list: [{(DQ <--help>)}] action: [ (C {<echo>} {(DQ ($ Id.VSub_DollarName '$usage'))}) (C {<echo>} {(DQ ($ Id.VSub_DollarName '$help'))}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<0>} ) ] spids: [242 245 267 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)] spids: [271 272 278 -1] ) ] ) (C {<shift>}) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-lt>} {<1>} {<Id.Lit_RBracket ']'>}) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_DollarName '$usage'))}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.Simple words: [ {<echo>} {(DQ <"Type '"> (${ Id.VSub_Name progname) <" --help' for more detailed help.">)} ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [289 302] ) ] ) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:host) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [336] ) ] ) terminator: <Id.Op_Semi _> ) (C {<shift>}) ] ) (command.ShFunction name: bourne_quote body: (command.BraceGroup children: [ (C {<local>} {<arg>} {<qarg>}) (command.ForEach iter_name: arg iter_words: [{(DQ ($ Id.VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:qarg) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name arg> suffix_op: (suffix_op.PatSub pat: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar "\\'">)} replace: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar "\\'">) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar "\\'">) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar "\\'"> ) } replace_mode: Id.Lit_Slash ) ) } spids: [380] ) ] ) (C {<echo>} {<-n>} {(DQ <"'"> ($ Id.VSub_DollarName '$qarg') <"' ">)}) ] ) ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:command) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<bourne_quote>} {(DQ ($ Id.VSub_At '$@'))})] ) ) ) } spids: [416] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:command) op: assign_op.Equal rhs: { (DQ <'cd '> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<bourne_quote>} {(DQ ($ Id.VSub_DollarName '$PWD'))})] ) ) <'\n'> (${ Id.VSub_Name command) ) } spids: [431] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$timeoutfactor'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:command) op: assign_op.Equal rhs: { (DQ <'export TIMEOUTFACTOR='> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<bourne_quote>} {(DQ ($ Id.VSub_DollarName '$timeoutfactor'))}) ] ) ) <'\n'> (${ Id.VSub_Name command) ) } spids: [465] ) ] ) ] spids: [451 462] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:full_command) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<bourne_quote>} {(DQ (${ Id.VSub_Name command))})] ) ) ) } spids: [496] ) ] ) (C {($ Id.VSub_DollarName '$ssh')} {(DQ ($ Id.VSub_DollarName '$host'))} {</bin/sh>} {<-c>} {(DQ ($ Id.VSub_DollarName '$full_command'))} ) ] )