(command.CommandList children: [ (command.FuncDef name: p666_show_usage body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-ne)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(p666_printf_error)} {(DQ (${ VSub_At '@'))})] ) ] ) (command.SimpleCommand words: [{(cat)}] redirects: [ (redir.HereDoc op: <Redir_DLess '<<'> fd: 16777215 here_begin: {(SQ <HEREDOC>)} here_end_span_id: 496 stdin_parts: [ ('usage: posixcube.sh -h HOST... [OPTION]... COMMAND...\n') ('\n') ( ' posixcube.sh is a POSIX compliant shell script server automation framework.\n' ) (' Use consistent APIs for common tasks and package functionality and file\n') (' templates in cubes (like recipes/playbooks from other frameworks).\n') ('\n') (' -? Help.\n') ( ' -h HOST Target host. Option may be specified multiple times. If a host has\n' ) ( " a wildcard ('*'), then HOST is interpeted as a regular expression,\n" ) ( " with '*' replaced with '.*' and any matching hosts in the following\n" ) (' files are added to the HOST list: /etc/ssh_config,\n') (' /etc/ssh/ssh_config, ~/.ssh/config, /etc/ssh_known_hosts,\n') (' /etc/ssh/ssh_known_hosts, ~/.ssh/known_hosts, and /etc/hosts.\n') ( ' -c CUBE Execute a cube. Option may be specified multiple times. If COMMANDS\n' ) (' are also specified, cubes are run first.\n') (' -u USER SSH user. Defaults to ${USER}.\n') (' -e ENVAR Shell script with environment variable assignments which is\n') (' uploaded and sourced on each HOST. Option may be specified\n') (' multiple times. Files ending with .enc will be decrypted\n') ( ' temporarily. If not specified, defaults to envars*sh envars*sh.enc\n' ) (' -p PWD Password for decrypting .enc ENVAR files.\n') ( ' -w PWDF File that contains the password for decrypting .enc ENVAR files.\n' ) (' Defaults to ~/.posixcube.pwd\n') (' -r ROLE Role name. Option may be specified multiple times.\n') ( ' -o P=V Set the specified parameter P with the value V. Do not put double\n' ) ( ' quotes around V. If V contains *, try to find matching hosts per\n' ) (' the -h algorithm. Option may be specified multiple times.\n') ( ' -i CUBE Upload a CUBE but do not execute it. This is needed when one CUBE\n' ) (' includes this CUBE using cube_include.\n') (' -v Show version information.\n') (' -d Print debugging information.\n') (' -q Quiet; minimize output.\n') ( ' -b If using bash, install programmable tab completion for SSH hosts.\n' ) ( ' -s Skip remote host initialization (making ~/posixcubes, uploading\n' ) (' posixcube.sh, etc.\n') (' -k Keep the cube_exec.sh generated script.\n') (' -z SPEC Use the SPEC set of options from the ./cubespecs.ini file\n') ( ' -a Asynchronously execute remote CUBEs/COMMANDs. Works on Bash only.\n' ) ( ' -y If a HOST returns a non-zero code, continue processing other HOSTs.\n' ) (' COMMAND Remote command to run on each HOST. Option may be specified\n') ( ' multiple times. If no HOSTs are specified, available sub-commands:\n' ) (' edit: Decrypt, edit, and re-encrypt ENVAR file with $EDITOR.\n') (' show: Decrypt and print ENVAR file.\n') (' source: Source all ENVAR files. Must be run with\n') ( ' POSIXCUBE_SOURCED (see Public Variables section below).\n' ) ('\n') ('Description:\n') ('\n') ( ' posixcube.sh is used to execute CUBEs and/or COMMANDs on one or more HOSTs.\n' ) (' \n') (' A CUBE is a shell script or directory containing shell scripts. The CUBE\n') (" is rsync'ed to each HOST. If CUBE is a shell script, it's executed. If\n") (' CUBE is a directory, a shell script of the same name in that directory\n') (' is executed. In both cases, the directory is changed to the directory\n') (' containing the script before execution so that you may reference files\n') (' such as templates using relative paths.\n') (' \n') ( ' An ENVAR script is encouraged to use environment variable names of the form\n' ) (' cubevar_${uniquecontext}_envar="value". If a CUBE directory contains the\n') ( " file `envars.sh`, it's sourced before anything else (including `-e ENVARs`).\n" ) (' \n') (' Both CUBEs and COMMANDs may execute any of the functions defined in the\n') ( ' "Public APIs" in the posixcube.sh script. Short descriptions of the functions\n' ) ( ' are in the APIs section below. See the source comments above each function\n' ) (' for details.\n') (' \n') ('Examples (assuming posixcube.sh is on ${PATH}, or executed absolutely):\n') ('\n') (' posixcube.sh -h socrates uptime\n') (' \n') ( ' Run the `uptime` command on host `socrates`. This is not very different\n' ) (' from ssh ${USER}@socrates uptime, except that COMMANDs (`uptime`) have\n') (' access to the cube_* public functions.\n') (' \n') (' posixcube.sh -h socrates -c test.sh\n') (' \n') (' Run the `test.sh` script (CUBE) on host `socrates`. The script has\n') (' access to the cube_* public functions.\n') (' \n') (' posixcube.sh -h socrates -c test\n') (' \n') (' Upload the entire `test` directory (CUBE) to the host `socrates` and\n') (' then execute the `test.sh` script within that directory (the name\n') ( ' of the script is expected to be the same as the name of the CUBE). This\n' ) (' allows for easily packaging other scripts and resources needed by\n') (' `test.sh`.\n') (' \n') (' posixcube.sh -u root -h socrates -h seneca uptime\n') (' \n') (' Run the `uptime` command on hosts `socrates` and `seneca`\n') (' as the user `root`.\n') (' \n') (' posixcube.sh -h web*.test.com uptime\n') (' \n') (' Run the `uptime` command on all hosts matching the regular expression\n') (' web.*.test.com in the SSH configuration files.\n') (' \n') ( ' sudo ${PATH_TO}/posixcube.sh -b && . /etc/bash_completion.d/posixcube_completion.sh\n' ) (' \n') ( ' For Bash users, install a programmable completion script to support tab\n' ) (' auto-completion of hosts from SSH configuration files.\n') ('\n') (' posixcube.sh -e production.sh.enc show\n') (' \n') (' Decrypt and show the contents of production.sh\n') (' \n') (' posixcube.sh -e production.sh.enc edit\n') (' \n') ( ' Decrypt, edit, and re-encrypt the contents of production.sh with $EDITOR\n' ) ('\n') ('Philosophy:\n') ('\n') (' Fail hard and fast. In principle, a well written script would check ${?}\n') (' after each command and either gracefully handle it, or report an error.\n') (' Few people write scripts this well, so we enforce this check (using\n') (' `cube_check_return` within all APIs) and we encourage you to do the same\n') (' in your scripts with `touch /etc/fstab || cube_check_return`. All cube_*\n') (" APIs are guaranteed to do their own checks, so you don't have to do this\n") ( " for those calls; however, note that if you're executing a cube_* API in a\n" ) (' sub-shell, although any failures will be reported by cube_check_return,\n') ( ' the script will continue unless you also check the return of the sub-shell.\n' ) (' For example: $(cube_readlink /etc/localtime) || cube_check_return\n') ( ' With this strategy, unfortunately piping becomes more difficult. There are\n' ) ( ' non-standard mechanisms like pipefail and PIPESTATUS, but the standardized\n' ) ( ' approach is to run each command separately and check the status. For example:\n' ) (' cube_app_result1="$(command1 || cube_check_return)" || cube_check_return\n') ( ' cube_app_result2="$(printf \'%s\' "${cube_app_result1}" | command2 || cube_check_return)" || cube_check_return\n' ) (' \n') (' We do not use `set -e` because some functions may handle all errors\n') ( ' internally (with `cube_check_return`) and use a positive return code as a\n' ) (' "benign" result (e.g. `cube_set_file_contents`).\n') ('\n') ('Frequently Asked Questions:\n') ('\n') ( ' * Why is there a long delay between "Preparing hosts" and the first remote\n' ) (' execution?\n') (' \n') ( " You can see details of what's happening with the `-d` flag. By default,\n" ) ( ' the script first loops through every host and ensures that ~/posixcubes/\n' ) (' exists, then it transfers itself to the remote host. These two actions\n') ( " may be skipped with the `-s` parameter if you've already run the script\n" ) ( " at least once and your version of this script hasn't been updated. Next,\n" ) ( ' the script loops through every host and transfers any CUBEs and a script\n' ) (' containing the CUBEs and COMMANDs to run (`cube_exec.sh`). Finally,\n') ( ' you\'ll see the "Executing on HOST..." line and the real execution starts.\n' ) ('\n') ('Cube Development:\n') ('\n') ( " Shell scripts don't have scoping, so to reduce the chances of function name\n" ) ( ' conflicts, name functions cube_${cubename}_${function} and name variables\n' ) (' cubevar_${cubename}_${var}.\n') ('\n') ('Public APIs:\n') (' \n') (' * cube_echo\n') (' Print ${@} to stdout prefixed with ([$(date)] [$(hostname)]) and\n') (' suffixed with a newline.\n') (' Example: cube_echo "Hello World"\n') ('\n') (' * cube_printf\n') (' Print $1 to stdout prefixed with ([$(date)] [$(hostname)]) and\n') (' suffixed with a newline (with optional printf arguments in $@).\n') (' Example: cube_printf "Hello World from PID %5s" $$\n') ('\n') (' * cube_error_echo\n') ( ' Same as cube_echo except output to stderr and include a red "Error: "\n' ) (' message prefix.\n') (' Example: cube_error "Goodbye World"\n') ('\n') (' * cube_error_printf\n') ( ' Same as cube_printf except output to stderr and include a red "Error: "\n' ) (' message prefix.\n') (' Example: cube_error "Goodbye World from PID %5s" $$\n') ('\n') (' * cube_throw\n') ( ' Same as cube_error_echo but also print a stack of functions and processes\n' ) (' (if available) and then call `exit 1`.\n') (' Example: cube_throw "Expected some_file."\n') ('\n') (' * cube_check_return\n') (' Check if $? is non-zero and call cube_throw if so.\n') (' Example: some_command || cube_check_return\n') ('\n') (' * cube_include\n') (' Include the ${1} cube\n') (' Example: cube_include core_cube\n') ('\n') (' * cube_check_numargs\n') (' Call cube_throw if there are less than $1 arguments in $@\n') (' Example: cube_check_numargs 2 "${@}"\n') ('\n') (' * cube_service\n') (' Run the $1 action on the $2 service.\n') (' Example: cube_service start crond\n') ('\n') (' * cube_package\n') (' Pass $@ to the package manager. Implicitly passes the the parameter\n') (' to say yes to questions.\n') (' Example: cube_package install python\n') ('\n') (' * cube_append_str\n') (' Echo $1 with $2 appended after a space if $1 was not blank.\n') ( ' Example: cubevar_app_str=$(cube_append_str "${cubevar_app_str}" "Test")\n' ) ('\n') (' * cube_command_exists\n') (' Check if $1 command or function exists in the current context.\n') (' Example: cube_command_exists systemctl\n') ('\n') (' * cube_dir_exists\n') (' Check if $1 exists as a directory.\n') (' Example: cube_dir_exists /etc/cron.d/\n') ('\n') (' * cube_file_exists\n') (' Check if $1 exists as a file with read access.\n') (' Example: cube_file_exists /etc/cron.d/0hourly\n') ('\n') (' * cube_operating_system\n') (' Detect operating system and return one of the POSIXCUBE_OS_* values.\n') ( ' Example: [ $(cube_operating_system) -eq ${POSIXCUBE_OS_LINUX} ] && ...\n' ) ('\n') (' * cube_operating_system_has_flavor\n') ( ' Check if the operating system flavor includes the flavor specified in $1\n' ) (' by one of the POSIXCUBE_OS_FLAVOR_* values.\n') ( ' Example: cube_operating_system_has_flavor ${POSIXCUBE_OS_FLAVOR_FEDORA} && ...\n' ) ('\n') (' * cube_shell\n') (' Detect running shell and return one of the CUBE_SHELL_* values.\n') (' Example: [ $(cube_shell) -eq ${POSIXCUBE_SHELL_BASH} ] && ...\n') ('\n') (' * cube_current_script_name\n') (' echo the basename of the currently executing script.\n') (' Example: script_name=$(cube_current_script_name)\n') ('\n') (' * cube_current_script_abs_path\n') (' echo the absolute path the currently executing script.\n') (' Example: script_name=$(cube_current_script_abs_path)\n') ('\n') (' * cube_file_size\n') (' echo the size of a file $1 in bytes\n') (' Example: cube_file_size some_file\n') ('\n') (' * cube_set_file_contents\n') ( " Copy the contents of $2 on top of $1 if $1 doesn't exist or the contents\n" ) ( ' are different than $2. If $2 ends with ".template", first evaluate all\n' ) (' ${VARIABLE} expressions (except for \\${VARIABLE}).\n') (' Example: cube_set_file_contents "/etc/npt.conf" "templates/ntp.conf"\n') ('\n') (' * cube_set_file_contents_string\n') ( " Set the contents of $1 to the string $@. Create file if it doesn't exist.\n" ) (' Example: cube_set_file_contents_string ~/.info "Hello World"\n') ('\n') (' * cube_expand_parameters\n') ( " echo stdin to stdout with all ${VAR}'s evaluated (except for \\${VAR})\n" ) (' Example: cube_expand_parameters < template > output\n') ('\n') (' * cube_readlink\n') (' Echo the absolute path of $1 without any symbolic links.\n') (' Example: cube_readlink /etc/localtime\n') ('\n') (' * cube_random_number\n') (' Echo a random number between 1 and $1\n') (' Example: cube_random_number 10\n') ('\n') (' * cube_tmpdir\n') (' Echo a temporary directory\n') (' Example: cube_tmpdir\n') ('\n') (' * cube_total_memory\n') (' Echo total system memory in bytes\n') (' Example: cube_total_memory\n') ('\n') (' * cube_ensure_directory\n') (' Ensure directory $1 exists\n') (' Example: cube_ensure_directory ~/.ssh/\n') ('\n') (' * cube_ensure_file\n') (' Ensure file $1 exists\n') (' Example: cube_ensure_file ~/.ssh/authorized_keys\n') ('\n') (' * cube_pushd\n') (' Equivalent to `pushd` with $1\n') (' Example: cube_pushd ~/.ssh/\n') ('\n') (' * cube_popd\n') (' Equivalent to `popd`\n') (' Example: cube_popd\n') ('\n') (' * cube_has_role\n') (' Return true if the role $1 is set.\n') (' Example: cube_has_role "database_backup"\n') ('\n') (' * cube_file_contains\n') (' Check if the file $1 contains $2\n') (' Example: cube_file_contains /etc/fstab nfsmount\n') ('\n') (' * cube_stdin_contains\n') (' Check if stdin contains $1\n') (' Example: echo "Hello World" | cube_stdin_contains "Hello"\n') ('\n') (' * cube_interface_ipv4_address\n') (' Echo the IPv4 address of interface $1\n') (' Example: cube_interface_ipv4_address eth0\n') ('\n') (' * cube_interface_ipv6_address\n') (' Echo the IPv6 address of interface $1\n') (' Example: cube_interface_ipv6_address eth0\n') ('\n') (' * cube_prompt\n') ( ' Prompt the question $1 followed by " (y/N)" and prompt for an answer.\n' ) ( ' A blank string answer is equivalent to No. Return true if yes, false otherwise.\n' ) (' Example: cube_prompt "Are you sure?"\n') ('\n') (' * cube_hostname\n') (' Echo full hostname.\n') (' Example: cube_hostname\n') ('\n') (' * cube_user_exists\n') (' Check if the $1 user exists\n') (' Example: cube_user_exists nginx\n') ('\n') (' * cube_create_user\n') (' Create the user $1\n') (' Example: cube_create_user nginx\n') ('\n') (' * cube_group_exists\n') (' Check if the $1 group exists\n') (' Example: cube_group_exists nginx\n') ('\n') (' * cube_create_group\n') (' Create the group $1\n') (' Example: cube_create_group nginx\n') ('\n') (' * cube_group_contains_user\n') (' Check if the $1 group contains the user $2\n') (' Example: cube_group_contains_user nginx nginx\n') ('\n') (' * cube_add_group_user\n') (' Add the user $2 to group $1\n') (' Example: cube_add_group_user nginx nginx\n') ('\n') ('Public Variables:\n') ('\n') (' * POSIXCUBE_APIS_ONLY\n') ( ' Set this to any value to only source the public APIs in posixcube.sh.\n' ) ( ' Example: POSIXCUBE_APIS_ONLY=true . posixcube.sh && cube_echo $(cube_random_number 10)\n' ) (' \n') (' * POSIXCUBE_SOURCED\n') ( ' Set this to any value to only run a sub-COMMAND, most commonly `source`,\n' ) ( ' to source in all ENVAR files, but skip actual execution of posixcube.\n' ) ( ' Example: POSIXCUBE_SOURCED=true . posixcube.sh source; POSIXCUBE_SOURCED= ; cube_echo Test\n' ) ('\n') ('Source: https://github.com/myplaceonline/posixcube\n') ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-ne)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(p666_printf_error)} {(DQ (${ VSub_At '@'))})] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name POSIXCUBE_SOURCED))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})] ) ] ) ] ) ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_VERSION) op:Equal rhs:{(0.1)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_DEBUG) op:Equal rhs:{(0)})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:POSIXCUBE_COLOR_RESET) op: Equal rhs: {(DQ (Lit_Other '\\') ('x1B[0m'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:POSIXCUBE_COLOR_RED) op: Equal rhs: {(DQ (Lit_Other '\\') ('x1B[31m'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:POSIXCUBE_COLOR_GREEN) op: Equal rhs: {(DQ (Lit_Other '\\') ('x1B[32m'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:POSIXCUBE_COLOR_YELLOW) op: Equal rhs: {(DQ (Lit_Other '\\') ('x1B[33m'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:POSIXCUBE_COLOR_BLUE) op: Equal rhs: {(DQ (Lit_Other '\\') ('x1B[34m'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:POSIXCUBE_COLOR_PURPLE) op: Equal rhs: {(DQ (Lit_Other '\\') ('x1B[35m'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:POSIXCUBE_COLOR_CYAN) op: Equal rhs: {(DQ (Lit_Other '\\') ('x1B[36m'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:POSIXCUBE_COLOR_WHITE) op: Equal rhs: {(DQ (Lit_Other '\\') ('x1B[37m'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_NEWLINE) op:Equal rhs:{(DQ ('\n'))})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_CUBE_NAME) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_CUBE_NAME_WITH_PREFIX) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_OS_UNKNOWN) op:Equal rhs:{(-1)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_OS_LINUX) op:Equal rhs:{(1)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_OS_MAC_OSX) op:Equal rhs:{(2)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_OS_WINDOWS) op:Equal rhs:{(3)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_OS_FLAVOR_UNKNOWN) op:Equal rhs:{(-1)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_OS_FLAVOR_FEDORA) op:Equal rhs:{(1)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_OS_FLAVOR_DEBIAN) op:Equal rhs:{(2)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_OS_FLAVOR_UBUNTU) op:Equal rhs:{(3)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_SHELL_UNKNOWN) op:Equal rhs:{(-1)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:POSIXCUBE_SHELL_BASH) op:Equal rhs:{(1)})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:POSIXCUBE_NODE_HOSTNAME) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(hostname)})]) left_token: <Left_CommandSub '$('> ) ) } ) ] ) (command.FuncDef name: cube_echo body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(printf)} { (DQ ('[') (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(date)})]) left_token: <Left_CommandSub '$('> ) ('] [') (${ VSub_Name POSIXCUBE_COLOR_GREEN) (${ VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] ') ) } ) ] ) ] else_action: [ (C {(printf)} { (DQ ('[') (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(date)})]) left_token: <Left_CommandSub '$('> ) ('] [') (${ VSub_Name POSIXCUBE_COLOR_GREEN) (${ VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ VSub_Name POSIXCUBE_COLOR_RESET) (${ VSub_Name POSIXCUBE_COLOR_CYAN) (${ VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX) (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(cube_line_number)} {(DQ (':'))})] ) left_token: <Left_CommandSub '$('> ) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] ') ) } ) ] ) (C {(echo)} {(DQ (${ VSub_At '@'))}) ] ) ) (command.FuncDef name: cube_printf body: (command.BraceGroup children: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_printf_str) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(printf)} { (DQ ('[') (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(date)})]) left_token: <Left_CommandSub '$('> ) ('] [') (${ VSub_Name POSIXCUBE_COLOR_GREEN) (${ VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] ') (${ VSub_Name cube_printf_str) (Lit_Other '\\') (n) ) } {(DQ (${ VSub_At '@'))} ) ] ) ] else_action: [ (C {(printf)} { (DQ ('[') (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(date)})]) left_token: <Left_CommandSub '$('> ) ('] [') (${ VSub_Name POSIXCUBE_COLOR_GREEN) (${ VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ VSub_Name POSIXCUBE_COLOR_RESET) (${ VSub_Name POSIXCUBE_COLOR_CYAN) (${ VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX) (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(cube_line_number)} {(DQ (':'))})] ) left_token: <Left_CommandSub '$('> ) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] ') (${ VSub_Name cube_printf_str) (Lit_Other '\\') (n) ) } {(DQ (${ VSub_At '@'))} ) ] ) ] ) ) (command.FuncDef name: cube_error_echo body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.SimpleCommand words: [ {(printf)} { (DQ ('[') (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(date)})]) left_token: <Left_CommandSub '$('> ) ('] [') (${ VSub_Name POSIXCUBE_COLOR_RED) (${ VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] ') (${ VSub_Name POSIXCUBE_COLOR_RED) (Error) (${ VSub_Name POSIXCUBE_COLOR_RESET) (': ') ) } ] redirects: [(redir.Redir op:<Redir_GreatAnd '1>&'> fd:1 arg_word:{(2)})] ) ] ) ] else_action: [ (command.SimpleCommand words: [ {(printf)} { (DQ ('[') (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(date)})]) left_token: <Left_CommandSub '$('> ) ('] [') (${ VSub_Name POSIXCUBE_COLOR_RED) (${ VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX) (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(cube_line_number)} {(DQ (':'))})] ) left_token: <Left_CommandSub '$('> ) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] ') (${ VSub_Name POSIXCUBE_COLOR_RED) (Error) (${ VSub_Name POSIXCUBE_COLOR_RESET) (': ') ) } ] redirects: [(redir.Redir op:<Redir_GreatAnd '1>&'> fd:1 arg_word:{(2)})] ) ] ) (command.SimpleCommand words: [{(echo)} {(DQ (${ VSub_At '@'))}] redirects: [(redir.Redir op:<Redir_GreatAnd '1>&'> fd:1 arg_word:{(2)})] ) ] ) ) (command.FuncDef name: cube_error_printf body: (command.BraceGroup children: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_error_printf_str) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.SimpleCommand words: [ {(printf)} { (DQ ('[') (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(date)})]) left_token: <Left_CommandSub '$('> ) ('] [') (${ VSub_Name POSIXCUBE_COLOR_RED) (${ VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] ') (${ VSub_Name POSIXCUBE_COLOR_RED) (Error) (${ VSub_Name POSIXCUBE_COLOR_RESET) (': ') (${ VSub_Name cube_error_printf_str) (Lit_Other '\\') (n) ) } {(DQ (${ VSub_At '@'))} ] redirects: [(redir.Redir op:<Redir_GreatAnd '1>&'> fd:1 arg_word:{(2)})] ) ] ) ] else_action: [ (command.SimpleCommand words: [ {(printf)} { (DQ ('[') (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(date)})]) left_token: <Left_CommandSub '$('> ) ('] [') (${ VSub_Name POSIXCUBE_COLOR_RED) (${ VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX) (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(cube_line_number)} {(DQ (':'))})] ) left_token: <Left_CommandSub '$('> ) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] ') (${ VSub_Name POSIXCUBE_COLOR_RED) (Error) (${ VSub_Name POSIXCUBE_COLOR_RESET) (': ') (${ VSub_Name cube_error_printf_str) (Lit_Other '\\') (n) ) } {(DQ (${ VSub_At '@'))} ] redirects: [(redir.Redir op:<Redir_GreatAnd '1>&'> fd:1 arg_word:{(2)})] ) ] ) ] ) ) (command.FuncDef name: cube_throw body: (command.BraceGroup children: [ (C {(cube_error_echo)} {(DQ (${ VSub_At '@'))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_throw_pid) op: Equal rhs: {($ VSub_Dollar '$$')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Op_DPipe] children: [ (C {(cube_command_exists)} {(caller)}) (C {(Lit_Other '[')} {(-r)} {(/proc/) (${ VSub_Name cube_throw_pid) (/cmdline)} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [(C {(cube_error_echo)} {(Stack) (Lit_Other ':')})] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(caller)}) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:x) op:Equal rhs:{(0)})] ) (command.WhileUntil keyword: <KW_While while> cond: [(command.Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)] body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_error_caller) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(caller)} {($ VSub_DollarName '$x')})] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_error_caller_result) op: Equal rhs: {(${ VSub_QMark '?')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_error_caller_result)} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: cube_error_caller_result_lineno ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name cube_error_caller))} ) (C {(awk)} {(SQ <'{ print $1 }'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: cube_error_caller_result_subroutine ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name cube_error_caller))} ) (C {(awk)} {(SQ <'{ print $2 }'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: cube_error_caller_result_sourcefile ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name cube_error_caller))} ) (C {(awk)} { (SQ < '{ for(i=3;i<=NF;i++){ printf "%s ", $i }; printf "\\n" }' > ) } ) (C {(sed)} {(SQ <'s/ $//'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (C {(cube_error_printf)} { (DQ (' [func] %4s ') (${ VSub_Name cube_error_caller_result_subroutine) (' ') (${ VSub_Name cube_error_caller_result_sourcefile) ) } {(DQ (${ VSub_Name cube_error_caller_result_lineno))} ) ] ) ] else_action: [(command.ControlFlow token:<ControlFlow_Break break>)] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:x) op: Equal rhs: { (word_part.ArithSubPart anode: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithWord w:{(${ VSub_Name x)}) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) } ) ] ) ] ) ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(/proc/) (${ VSub_Name cube_throw_pid) (/cmdline)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.WhileUntil keyword: <KW_While while> cond: [(C {(true)})] body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_throw_cmdline) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cat)} {(/proc/) (${ VSub_Name cube_throw_pid) (/cmdline)} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_throw_ppid) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(grep)} {(PPid)} {(/proc/) (${ VSub_Name cube_throw_pid) (/status)} ) (C {(awk)} {(SQ <'{ print $2; }'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (C {(cube_error_printf)} {(DQ (' [pid] %5s ') (${ VSub_Name cube_throw_cmdline))} {(${ VSub_Name cube_throw_pid)} ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name cube_throw_pid))} {(Lit_Other '=')} {(DQ (1))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(command.ControlFlow token:<ControlFlow_Break break>)] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_throw_pid) op: Equal rhs: {(${ VSub_Name cube_throw_ppid)} ) ] ) ] ) ) ] ) ] ) (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] ) ) (command.FuncDef name: cube_line_number body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(caller)}) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:x) op:Equal rhs:{(0)})] ) (command.WhileUntil keyword: <KW_While while> cond: [(command.Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)] body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_api_caller_output) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(caller)} {($ VSub_DollarName '$x')})] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_api_caller_result) op: Equal rhs: {(${ VSub_QMark '?')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_api_caller_result)} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_api_caller_result_lineno) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} { (DQ (${ VSub_Name cube_api_caller_output) ) } ) (C {(awk)} {(SQ <'{ print $1 }'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: cube_api_caller_result_subroutine ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} { (DQ (${ VSub_Name cube_api_caller_output) ) } ) (C {(awk)} {(SQ <'{ print $2 }'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: cube_api_caller_result_sourcefile ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} { (DQ (${ VSub_Name cube_api_caller_output) ) } ) (C {(awk)} { (SQ < '{ for(i=3;i<=NF;i++){ printf "%s ", $i }; printf "\\n" }' > ) } ) (C {(sed)} {(SQ <'s/ $//'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: cube_api_caller_result_sourcefile_basename ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} { (DQ (${ VSub_Name cube_api_caller_result_sourcefile ) ) } ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} { (DQ (${ VSub_Name cube_api_caller_result_sourcefile_basename ) ) } {(KW_Bang '!') (Lit_Other '=')} {(DQ (posixcube.sh))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 1))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(printf)} {(DQ ('%s'))} {(DQ (${ VSub_Number 1))}) ] ) ] ) (C {(printf)} {(DQ ('%s'))} {(DQ (${ VSub_Name cube_api_caller_result_lineno))} ) (command.ControlFlow token: <ControlFlow_Break break> ) ] ) ] ) ] ) ] else_action: [(command.ControlFlow token:<ControlFlow_Break break>)] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:x) op: Equal rhs: { (word_part.ArithSubPart anode: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithWord w:{(${ VSub_Name x)}) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) } ) ] ) ] ) ) ] ) ] ) ] ) ) (command.FuncDef name: cube_check_return body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_check_return_val) op: Equal rhs: {(${ VSub_QMark '?')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_check_return_val)} {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_check_return_info) op: Equal rhs: {(DQ )} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Star '*'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_check_return_info) op: Equal rhs: {(DQ (' (') (${ VSub_Star '*') (')'))} ) ] ) ] ) ] ) (C {(cube_throw)} { (DQ ('Previous command failed with code ') (${ VSub_Name cube_check_return_val) (${ VSub_Name cube_check_return_info) ) } ) ] ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(${ VSub_Name cube_check_return_val)} ) ] ) ) (command.FuncDef name: cube_append_str body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 1))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(DQ (${ VSub_Number 2))})] ) ] else_action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 3))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(DQ (${ VSub_Number 1) (' ') (${ VSub_Number 2))})] ) ] else_action: [ (C {(echo)} {(DQ (${ VSub_Number 1) (${ VSub_Number 3) (${ VSub_Number 2))}) ] ) ] ) ] ) ) (command.FuncDef name: cube_command_exists body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.SimpleCommand words: [{(command)} {(-v)} {(${ VSub_Number 1)}] redirects: [ (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)}) (redir.Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)}) ] ) ] ) ) (command.FuncDef name: cube_dir_exists body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (C {(Lit_Other '[')} {(-d)} {(DQ (${ VSub_Number 1))} {(Lit_Other ']')}) ] ) ) (command.FuncDef name: cube_file_exists body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Number 1))} {(Lit_Other ']')}) ] ) ) (command.FuncDef name: cube_operating_system body: (command.BraceGroup children: [ (command.Case to_match: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(uname)} {(-s)})]) left_token: <Left_CommandSub '$('> ) ) } arms: [ (case_arm pat_list: [{(Linux)}] action: [(C {(echo)} {(${ VSub_Name POSIXCUBE_OS_LINUX)})] ) (case_arm pat_list: [{(Darwin)}] action: [(C {(echo)} {(${ VSub_Name POSIXCUBE_OS_MAC_OSX)})] ) (case_arm pat_list: [ {(CYGWIN) (Lit_Other '*')} {(MINGW32) (Lit_Other '*')} {(MSYS) (Lit_Other '*')} ] action: [(C {(echo)} {(${ VSub_Name POSIXCUBE_OS_WINDOWS)})] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(C {(echo)} {(${ VSub_Name POSIXCUBE_OS_UNKNOWN)})] ) ] ) ] ) ) (command.FuncDef name: cube_operating_system_has_flavor body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.Case to_match: {(DQ (${ VSub_Number 1))} arms: [ (case_arm pat_list: [{(${ VSub_Name POSIXCUBE_OS_FLAVOR_FEDORA)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_file_exists)} {(DQ (/etc/fedora-release))}) terminator: <Op_Semi ';'> ) ] action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) ] ) (case_arm pat_list: [{(${ VSub_Name POSIXCUBE_OS_FLAVOR_UBUNTU)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_file_exists)} {(DQ (/etc/lsb-release))}) terminator: <Op_Semi ';'> ) ] action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) ] ) (case_arm pat_list: [{(${ VSub_Name POSIXCUBE_OS_FLAVOR_DEBIAN)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Op_DPipe] children: [ (C {(cube_file_contains)} {(/etc/os-release)} { (DQ ('NAME=') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) (Debian) ) } ) (C {(cube_file_exists)} {(DQ (/etc/lsb-release))}) ] ) terminator: <Op_Semi ';'> ) ] action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) ] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(C {(cube_throw)} {(DQ ('Unknown flavor ') (${ VSub_Number 1))})] ) ] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.FuncDef name: cube_shell body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$BASH'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(${ VSub_Name POSIXCUBE_SHELL_BASH)})] ) ] else_action: [(C {(echo)} {(${ VSub_Name POSIXCUBE_SHELL_UNKNOWN)})] ) ] ) ) (command.FuncDef name: cube_check_numargs body: (command.BraceGroup children: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_check_numargs_expected) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Pound '#')} {(-lt)} {(${ VSub_Name cube_check_numargs_expected)} {(Lit_Other ']')} ) (C {(cube_throw)} { (DQ ('Expected ') (${ VSub_Name cube_check_numargs_expected) (' arguments, received ') (${ VSub_Pound '#') (.) ) } ) ] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] ) ) (command.FuncDef name: cube_service body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(systemctl)}) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 1))} {(Lit_Other '=')} {(DQ (daemon-reload))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(systemctl)} {($ VSub_Number '$1')}) (C {(cube_check_return)}) ] ) ] ) ] else_action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(systemctl)} {($ VSub_Number '$1')} {($ VSub_Number '$2')}) (C {(cube_check_return)}) ] ) ] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(service)}) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 1))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (daemon-reload))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(service)} {($ VSub_Number '$2')} {($ VSub_Number '$1')}) (C {(cube_check_return)}) ] ) ] ) ] ) ] ) ] else_action: [(C {(cube_throw)} {(DQ ('Could not find service program'))})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 2))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Case to_match: {(DQ (${ VSub_Number 1))} arms: [ (case_arm pat_list: [{(stop)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_service_verb) op: Equal rhs: {(DQ (stopped))} ) ] ) ] ) (case_arm pat_list: [{(enable)} {(disable)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_service_verb) op: Equal rhs: {(DQ (${ VSub_Number 1) (d))} ) ] ) ] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_service_verb) op: Equal rhs: {(DQ (${ VSub_Number 1) (ed))} ) ] ) ] ) ] ) (C {(cube_echo)} { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(${ VSub_Name cube_service_verb)}) (C {(cut)} {(-c1)}) (C {(tr)} {(Lit_Other '[') (a-z) (Lit_Other ']')} {(Lit_Other '[') (A-Z) (Lit_Other ']')} ) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(${ VSub_Name cube_service_verb)}) (C {(cut)} {(-c2-)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) (' ') ($ VSub_Number '$2') (' service') ) } ) ] ) ] else_action: [(C {(cube_echo)} {(DQ ('Executed ') ($ VSub_Number '$1'))})] ) ] ) ) (command.FuncDef name: cube_service_exists body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(systemctl)}) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_service_exists_output) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.SimpleCommand words: [{(systemctl)} {(status)} {(${ VSub_Number 1)}] redirects: [ (redir.Redir op: <Redir_GreatAnd '2>&'> fd: 2 arg_word: {(1)} ) ] ) ] ) left_token: <Left_CommandSub '$('> ) ) } ) ] ) (command.Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name cube_service_exists_output))}) (command.SimpleCommand words: [{(grep)} {(-l)} {(loaded)}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(/dev/null)} ) (redir.Redir op: <Redir_GreatAnd '2>&'> fd: 2 arg_word: {(1)} ) ] ) ] negated: F ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {($ VSub_QMark '$?')} ) ] ) ] else_action: [(C {(cube_throw)} {(DQ ('Not implemented'))})] ) ] ) ) (command.FuncDef name: cube_package body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(dnf)}) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_echo)} {(DQ ('Executing dnf -y ') (${ VSub_At '@'))}) (command.AndOr ops: [Op_DPipe] children: [(C {(dnf)} {(-y)} {(DQ (${ VSub_At '@'))}) (C {(cube_check_return)})] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(yum)}) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_echo)} {(DQ ('Executing yum -y ') (${ VSub_At '@'))}) (command.AndOr ops: [Op_DPipe] children: [(C {(yum)} {(-y)} {(DQ (${ VSub_At '@'))}) (C {(cube_check_return)})] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(apt-get)}) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_echo)} {(DQ ('Executing apt-get -y ') (${ VSub_At '@'))}) (command.AndOr ops: [Op_DPipe] children: [ (command.SimpleCommand words: [{(apt-get)} {(-y)} {(DQ (${ VSub_At '@'))}] more_env: [(env_pair name:DEBIAN_FRONTEND val:{(noninteractive)})] ) (C {(cube_check_return)}) ] ) ] ) ] else_action: [ (C {(cube_throw)} {(DQ ('cube_package has not implemented your operating system yet'))}) ] ) ] ) ) (command.FuncDef name: cube_current_script_name body: (command.BraceGroup children:[(C {(basename)} {(DQ ($ VSub_Number '$0'))})]) ) (command.FuncDef name: cube_current_script_abs_path body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_current_script_abs_path_dirname) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Sentence child: (C {(cd)} { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(dirname)} {(DQ ($ VSub_Number '$0'))})] ) left_token: <Left_CommandSub '$('> ) ) } ) terminator: <Op_Semi ';'> ) (C {(pwd)} {(-P)}) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (C {(echo)} { (DQ (${ VSub_Name cube_current_script_abs_path_dirname) (/) (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(cube_current_script_name)})]) left_token: <Left_CommandSub '$('> ) ) } ) ] ) ) (command.FuncDef name: cube_file_size body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_file_exists)} {(DQ (${ VSub_Number 1))}) terminator: <Op_Semi ';'> ) ] action: [ (command.SimpleCommand words: [{(wc)} {(-c)}] redirects: [ (redir.Redir op: <Redir_Less '<'> fd: 16777215 arg_word: {(DQ (${ VSub_Number 1))} ) ] ) ] ) ] else_action: [ (C {(cube_throw)} {(DQ ('Could not find or read file ') (${ VSub_Number 1))}) ] ) ] ) ) (command.FuncDef name: cube_expand_parameters body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_expand_parameters_is_bash) op: Equal rhs: {(0)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} { (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(cube_shell)})]) left_token: <Left_CommandSub '$('> ) } {(-eq)} {(${ VSub_Name POSIXCUBE_SHELL_BASH)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_expand_parameters_is_bash) op: Equal rhs: {(0)} ) ] ) ] ) ] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (command.AndOr ops: [Op_DPipe] children: [ (command.SimpleCommand words: [{(read)} {(-r)} {(cube_expand_parameters_line)}] more_env: [(env_pair name:IFS val:{(SQ )})] ) (C {(Lit_Other '[')} {(-n)} {(DQ (${ VSub_Name cube_expand_parameters_line))} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_expand_parameters_line_escaped) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(printf)} {(Lit_Other '%') (s)} {(DQ (${ VSub_Name cube_expand_parameters_line))} ) (C {(tr)} {(SQ <'`([$\\\\"'>)} {(SQ <'\\1\\2\\3\\4\\5\\6'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {($ VSub_DollarName '$cube_expand_parameters_is_bash')} {(-eq)} {(1)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_expand_parameters_line_escaped) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name cube_expand_parameters_line_escaped> suffix_op: (suffix_op.PatSub pat: { (word_part.SingleQuotedPart left: <Left_DollarSingleQuote "$'"> tokens: [<Char_Octal3 '\\4'>] ) ('{') } replace: { (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\$'> ) ('{') } replace_mode: Lit_Slash ) ) } ) ] ) ] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_expand_parameters_line_escaped) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(printf)} {(Lit_Other '%') (s)} { (DQ (${ VSub_Name cube_expand_parameters_line_escaped) ) } ) (C {(sed)} {(SQ <'s/\\([^\\x05]\\)\\x04{/\\1${/g'>)}) (C {(sed)} {(SQ <'s/^\\x04{/${/g'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_expand_parameters_output) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(eval)} { (DQ ("printf '%s") (Lit_Other '\\') ("n' ") (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) (${ VSub_Name cube_expand_parameters_line_escaped) (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ) } ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (C {(cube_check_return)} {(DQ (${ VSub_Name cube_expand_parameters_line_escaped))} ) ] ) (command.Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name cube_expand_parameters_output))}) (C {(tr)} {(SQ <'\\1\\2\\3\\4\\5\\6'>)} {(SQ <'`([$\\\\"'>)}) ] negated: F ) ] ) ) ] ) ) (command.FuncDef name: cube_read_heredoc body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_read_heredoc_first) op: Equal rhs: {(1)} ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:cube_read_heredoc_result) op:Equal rhs:{(DQ )})] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (command.SimpleCommand words: [{(read)} {(-r)} {(cube_read_heredoc_line)}] more_env: [(env_pair name:IFS val:{(SQ <'\\n'>)})] ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_read_heredoc_first)} {(-eq)} {(1)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_read_heredoc_result) op: Equal rhs: {(DQ (${ VSub_Name cube_read_heredoc_line))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_read_heredoc_first) op: Equal rhs: {(0)} ) ] ) ] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_read_heredoc_result) op: Equal rhs: { (DQ (${ VSub_Name cube_read_heredoc_result) (${ VSub_Name POSIXCUBE_NEWLINE) (${ VSub_Name cube_read_heredoc_line) ) } ) ] ) ] ) ] ) ) ] ) ) (command.FuncDef name: cube_set_file_contents body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(2)} {(DQ (${ VSub_At '@'))}) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_target_file) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_input_file) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_debug) op: Equal rhs: {(DQ (${ VSub_Name cube_set_file_contents_input_file))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_needs_replace) op: Equal rhs: {(0)} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_input_file_needs_remove) op: Equal rhs: {(0)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(cube_file_exists)} {(DQ (${ VSub_Name cube_set_file_contents_input_file))} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_throw)} { (DQ ('Could not find or read input ') (${ VSub_Name cube_set_file_contents_input_file) ) } ) ] ) ] ) (C {(cube_ensure_directory)} { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(dirname)} {(DQ (${ VSub_Name cube_set_file_contents_target_file))}) ] ) left_token: <Left_CommandSub '$('> ) ) } ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_input_file_is_template) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(expr)} {(DQ (${ VSub_Name cube_set_file_contents_input_file))} {(Lit_Other ':')} {(SQ <'.*\\.template$'>)} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_set_file_contents_input_file_is_template)} {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_input_file_original) op: Equal rhs: {(DQ (${ VSub_Name cube_set_file_contents_input_file))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_input_file) op: Equal rhs: {(DQ (${ VSub_Name cube_set_file_contents_input_file) (.tmp))} ) ] ) (C {(cube_echo)} { (DQ ('Expanding parameters of ') (${ VSub_Name cube_set_file_contents_input_file_original) ) } ) (command.AndOr ops: [Op_DPipe] children: [ (command.SimpleCommand words: [{(cube_expand_parameters)}] redirects: [ (redir.Redir op: <Redir_Less '<'> fd: 16777215 arg_word: {(DQ (${ VSub_Name cube_set_file_contents_input_file_original))} ) (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ (${ VSub_Name cube_set_file_contents_input_file))} ) ] ) (C {(cube_check_return)}) ] ) (C {(cube_echo)} {(DQ ('Expansion complete'))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_input_file_needs_remove) op: Equal rhs: {(1)} ) ] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_file_exists)} {(DQ (${ VSub_Name cube_set_file_contents_target_file))}) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_target_file_size) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_file_size)} {(DQ (${ VSub_Name cube_set_file_contents_target_file))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_input_file_size) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_file_size)} {(DQ (${ VSub_Name cube_set_file_contents_input_file))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name POSIXCUBE_DEBUG)} {(-eq)} {(1)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_echo)} { (DQ ('Target file ') (${ VSub_Name cube_set_file_contents_target_file) (' exists. Target size: ') (${ VSub_Name cube_set_file_contents_target_file_size) (', source size: ') (${ VSub_Name cube_set_file_contents_input_file_size) ) } ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_set_file_contents_target_file_size)} {(-eq)} {(${ VSub_Name cube_set_file_contents_input_file_size)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: cube_set_file_contents_target_file_cksum ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(cksum)} { (DQ (${ VSub_Name cube_set_file_contents_target_file ) ) } ) (C {(awk)} {(SQ <'{print $1}'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: cube_set_file_contents_input_file_cksum ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(cksum)} { (DQ (${ VSub_Name cube_set_file_contents_input_file ) ) } ) (C {(awk)} {(SQ <'{print $1}'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name POSIXCUBE_DEBUG)} {(-eq)} {(1)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_echo)} { (DQ ('Target cksum: ') (${ VSub_Name cube_set_file_contents_target_file_cksum) (', source cksum: ') (${ VSub_Name cube_set_file_contents_input_file_cksum) ) } ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} { (DQ (${ VSub_Name cube_set_file_contents_target_file_cksum) ) } {(KW_Bang '!') (Lit_Other '=')} {(DQ (${ VSub_Name cube_set_file_contents_input_file_cksum))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: cube_set_file_contents_needs_replace ) op: Equal rhs: {(1)} ) ] ) ] ) ] ) ] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_needs_replace) op: Equal rhs: {(1)} ) ] ) ] ) ] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_needs_replace) op: Equal rhs: {(1)} ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_set_file_contents_needs_replace)} {(-eq)} {(1)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_echo)} { (DQ ('Updating file contents of ') (${ VSub_Name cube_set_file_contents_target_file) (' with ') (${ VSub_Name cube_set_file_contents_debug) ) } ) (command.AndOr ops: [Op_DPipe] children: [ (C {(cp)} {(DQ (${ VSub_Name cube_set_file_contents_input_file))} {(DQ (${ VSub_Name cube_set_file_contents_target_file))} ) (C {(cube_check_return)}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_set_file_contents_input_file_needs_remove)} {(-eq)} {(1)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(rm)} {(-f)} {(DQ (${ VSub_Name cube_set_file_contents_input_file))}) (C {(cube_check_return)}) ] ) ] ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] else_action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_set_file_contents_input_file_needs_remove)} {(-eq)} {(1)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(rm)} {(-f)} {(DQ (${ VSub_Name cube_set_file_contents_input_file))}) (C {(cube_check_return)}) ] ) ] ) ] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ] ) ) (command.FuncDef name: cube_random_number body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.Pipeline children: [ (C {(echo)} {(DQ )}) (C {(awk)} {(DQ ('{ srand(); print int(') (${ VSub_Number 1) (' * rand()) + 1; }'))}) ] negated: F ) ] ) ) (command.FuncDef name: cube_tmpdir body: (command.BraceGroup children:[(C {(echo)} {(DQ (/tmp/))})]) ) (command.FuncDef name: cube_set_file_contents_string body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(2)} {(DQ (${ VSub_At '@'))}) (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_target_file) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_tmp) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(cube_tmpdir)})]) left_token: <Left_CommandSub '$('> ) (/tmpcontents_) (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(cube_random_number)} {(10000)})] ) left_token: <Left_CommandSub '$('> ) (.template) ) } ) ] ) (command.SimpleCommand words: [{(echo)} {(DQ (${ VSub_At '@'))}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ (${ VSub_Name cube_set_file_contents_tmp))} ) ] ) (C {(cube_set_file_contents)} {(DQ (${ VSub_Name cube_set_file_contents_target_file))} {(DQ (${ VSub_Name cube_set_file_contents_tmp))} {(DQ ('from string'))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_set_file_contents_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (C {(rm)} {(DQ (${ VSub_Name cube_set_file_contents_tmp))}) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(${ VSub_Name cube_set_file_contents_result)} ) ] ) ) (command.FuncDef name: cube_readlink body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_readlink_target) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_readlink_path) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(cd)} {(-P)} {(--)} { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(dirname)} {(--)} {(DQ (${ VSub_Name cube_readlink_target))} ) ] ) left_token: <Left_CommandSub '$('> ) ) } ) (C {(pwd)} {(-P)}) ] ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_readlink_path) op: Equal rhs: {(${ VSub_Name cube_readlink_path) (/) (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(--)} {(DQ (${ VSub_Name cube_readlink_target))}) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-h)} {(DQ (${ VSub_Name cube_readlink_path))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_readlink_dir) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(dirname)} {(--)} {(DQ (${ VSub_Name cube_readlink_path))}) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_readlink_sym) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(readlink)} {(DQ (${ VSub_Name cube_readlink_path))})] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_readlink_path) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.AndOr ops: [Op_DAmp Op_DAmp] children: [ (C {(cd)} {(DQ (${ VSub_Name cube_readlink_dir))}) (C {(cd)} { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(dirname)} {(--)} {(DQ (${ VSub_Name cube_readlink_sym))} ) ] ) left_token: <Left_CommandSub '$('> ) ) } ) (C {(pwd)}) ] ) ] ) left_token: <Left_CommandSub '$('> ) (/) (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(--)} {(DQ (${ VSub_Name cube_readlink_sym))}) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) ) (C {(echo)} {(${ VSub_Name cube_readlink_path)}) ] ) ) (command.FuncDef name: cube_total_memory body: (command.BraceGroup children: [ (command.Case to_match: {(DQ (${ VSub_Number 1))} arms: [ (case_arm pat_list: [{(kb)} {(KB)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_total_memory_divisor) op: Equal rhs: {(1024)} ) ] ) ] ) (case_arm pat_list: [{(mb)} {(MB)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_total_memory_divisor) op: Equal rhs: {(1048576)} ) ] ) ] ) (case_arm pat_list: [{(gb)} {(GB)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_total_memory_divisor) op: Equal rhs: {(1073741824)} ) ] ) ] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_total_memory_divisor) op: Equal rhs: {(1)} ) ] ) ] ) ] ) (C {(echo)} { (word_part.ArithSubPart anode: (arith_expr.ArithBinary op_id: Arith_Slash left: (arith_expr.ArithBinary op_id: Arith_Star left: (arith_expr.ArithWord w: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(grep)} {(DQ ('^MemTotal:'))} {(/proc/meminfo)}) (C {(awk)} {(SQ <'{print $2}'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) right: (arith_expr.ArithWord w:{(Lit_Digits 1024)}) ) right: (arith_expr.ArithWord w:{(${ VSub_Name cube_total_memory_divisor)}) ) ) } ) ] ) ) (command.FuncDef name: cube_ensure_directory body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_ensure_directory_result) op: Equal rhs: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(cube_dir_exists)} {(DQ (${ VSub_Number 1))})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(mkdir)} {(-p)} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)}) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_ensure_directory_result) op: Equal rhs: {(0)} ) ] ) (C {(cube_echo)} {(DQ ('Created directory ') (${ VSub_Number 1))}) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 2))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(chmod)} {(${ VSub_Number 2)} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)}) ] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 3))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(chown)} {(${ VSub_Number 3)} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)}) ] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 4))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(chgrp)} {(${ VSub_Number 4)} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)}) ] ) ] ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(${ VSub_Name cube_ensure_directory_result)} ) ] ) ) (command.FuncDef name: cube_ensure_file body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_ensure_file_result) op: Equal rhs: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(cube_file_exists)} {(DQ (${ VSub_Number 1))})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_ensure_directory)} { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(dirname)} {(DQ (${ VSub_Number 1))})] ) left_token: <Left_CommandSub '$('> ) ) } {($ VSub_Number '$2')} {($ VSub_Number '$3')} {($ VSub_Number '$4')} ) (command.AndOr ops: [Op_DPipe] children: [(C {(touch)} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_ensure_file_result) op: Equal rhs: {(0)} ) ] ) (C {(cube_echo)} {(DQ ('Created file ') (${ VSub_Number 1))}) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 2))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(chmod)} {(${ VSub_Number 2)} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)}) ] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 3))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(chown)} {(${ VSub_Number 3)} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)}) ] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 4))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(chgrp)} {(${ VSub_Number 4)} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)}) ] ) ] ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(${ VSub_Name cube_ensure_file_result)} ) ] ) ) (command.FuncDef name: cube_pushd body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(pushd)}) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [(C {(pushd)} {(DQ (${ VSub_At '@'))}) (C {(cube_check_return)})] ) ] ) ] else_action: [(C {(cube_throw)} {(DQ ('TODO: Not implemented'))})] ) ] ) ) (command.FuncDef name: cube_popd body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(popd)}) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [(C {(popd)} {(DQ (${ VSub_At '@'))}) (C {(cube_check_return)})] ) ] ) ] else_action: [(C {(cube_throw)} {(DQ ('TODO: Not implemented'))})] ) ] ) ) (command.FuncDef name: cube_has_role body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.ForEach iter_name: cube_has_role_name iter_words: [{(${ VSub_Name cubevar_api_roles)}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name cube_has_role_name))} {(Lit_Other '=')} {(DQ (${ VSub_Number 1))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) ] ) ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.FuncDef name: cube_file_contains body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(2)} {(DQ (${ VSub_At '@'))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_file_contains_grep_output) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(grep)} {(-l)} {(DQ (${ VSub_Number 2))} {(DQ (${ VSub_Number 1))}) ] ) left_token: <Left_CommandSub '$('> ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_file_contains_grep_results) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_file_contains_grep_results)} {(-eq)} {(2)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(cube_throw)} {(DQ (${ VSub_Name cube_file_contains_grep_output))})] ) ] else_action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(${ VSub_Name cube_file_contains_grep_results)} ) ] ) ] ) ) (command.FuncDef name: cube_stdin_contains body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_stdin_contains_output) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(grep)} {(-l)} {(DQ (${ VSub_Number 1))} {(-)})] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_stdin_contains_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name cube_stdin_contains_result)} {(-eq)} {(2)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(cube_throw)} {(DQ (${ VSub_Name cube_stdin_contains_output))})] ) ] else_action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(${ VSub_Name cube_stdin_contains_result)} ) ] ) ] ) ) (command.FuncDef name: cube_interface_ipv4_address body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.AndOr ops: [Op_DPipe] children: [ (command.Pipeline children: [ (C {(ip)} {(-4)} {(-o)} {(address)} {(show)} {(dev)} {(${ VSub_Number 1)}) (C {(head)} {(-1)}) (C {(awk)} {(SQ <'{print $4}'>)}) (C {(sed)} {(SQ <'s/\\/.*$//g'>)}) ] negated: F ) (C {(cube_check_return)}) ] ) ] ) ) (command.FuncDef name: cube_interface_ipv6_address body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.AndOr ops: [Op_DPipe] children: [ (command.Pipeline children: [ (C {(ip)} {(-6)} {(-o)} {(address)} {(show)} {(dev)} {(${ VSub_Number 1)}) (C {(head)} {(-1)}) (C {(awk)} {(SQ <'{print $4}'>)}) (C {(sed)} {(SQ <'s/\\/.*$//g'>)}) ] negated: F ) (C {(cube_check_return)}) ] ) ] ) ) (command.FuncDef name: cube_prompt body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.WhileUntil keyword: <KW_While while> cond: [(command.Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)] body: (command.DoGroup children: [ (C {(printf)} {(DQ (${ VSub_Number 1) (' (y/N)? '))}) (command.AndOr ops: [Op_DPipe] children: [(C {(read)} {(cube_prompt_response)}) (C {(cube_check_return)})] ) (command.Case to_match: {(DQ (${ VSub_Name cube_prompt_response))} arms: [ (case_arm pat_list: [{(Lit_Other '[') (Yy) (Lit_Other ']') (Lit_Other '*')}] action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) (case_arm pat_list: [{(DQ )} {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '*')}] action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(C {(echo)} {(DQ ('Please answer yes or no.'))})] ) ] ) ] ) ) ] ) ) (command.FuncDef name: cube_hostname body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 1))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [(C {(uname)} {(-n)}) (C {(cube_check_return)})] ) ] ) ] else_action: [ (command.AndOr ops: [Op_DPipe] children: [ (command.Pipeline children: [(C {(uname)} {(-n)}) (C {(sed)} {(SQ <'s/\\..*$//g'>)})] negated: F ) (C {(cube_check_return)}) ] ) ] ) ] ) ) (command.FuncDef name: cube_user_exists body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.SimpleCommand words: [{(id)} {(-u)} {(DQ (${ VSub_Number 1))}] redirects: [ (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)}) (redir.Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)}) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {($ VSub_QMark '$?')} ) ] ) ) (command.FuncDef name: cube_create_user body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.AndOr ops: [Op_DPipe] children: [(C {(useradd)} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 2))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(usermod)} {(-s)} {(DQ (${ VSub_Number 2))} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)}) ] ) ] ) ] ) ] ) ) (command.FuncDef name: cube_group_exists body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (C {(cube_file_contains)} {(/etc/group)} {(DQ ('^') (${ VSub_Number 1) (':'))}) ] ) ) (command.FuncDef name: cube_create_group body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.AndOr ops: [Op_DPipe] children: [(C {(groupadd)} {(DQ (${ VSub_Number 1))}) (C {(cube_check_return)})] ) ] ) ) (command.FuncDef name: cube_group_contains_user body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(2)} {(DQ (${ VSub_At '@'))}) (command.ForEach iter_name: cube_group_contains_user iter_words: [ { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(groups)} {(DQ (${ VSub_Number 2))}) (C {(sed)} {(DQ (s/) (${ VSub_Number 2) (' : //g'))}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name cube_group_contains_user))} {(Lit_Other '=')} {(DQ (${ VSub_Number 1))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) ] ) ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.FuncDef name: cube_add_group_user body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(2)} {(DQ (${ VSub_At '@'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Number 3))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(usermod)} {(-a)} {(-G)} {(DQ (${ VSub_Number 1))} {(DQ (${ VSub_Number 2))}) ] ) ] else_action: [(C {(usermod)} {(-g)} {(DQ (${ VSub_Number 1))} {(DQ (${ VSub_Number 2))})] ) ] ) ) (command.FuncDef name: cube_include body: (command.BraceGroup children: [ (C {(cube_check_numargs)} {(1)} {(DQ (${ VSub_At '@'))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_include_name) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 1> suffix_op: (suffix_op.StringUnary op_id: VOp1_DPercent arg_word: {(Lit_Slash /)} ) ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-d)} {(DQ (../) (${ VSub_Name cube_include_name))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cube_include_name_base) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name cube_include_name))} {(.sh)}) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} { (DQ (../) (${ VSub_Name cube_include_name) (/) (${ VSub_Name cube_include_name_base) (.sh) ) } {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_echo)} {(DQ ('Including ') (${ VSub_Name cube_include_name) (' cube...'))} ) (C {(.)} { (DQ (../) (${ VSub_Name cube_include_name) (/) (${ VSub_Name cube_include_name_base) (.sh) ) } ) ] ) ] else_action: [ (C {(cube_throw)} { (DQ ('Cannot read ') (${ VSub_Name cube_include_name) (/) (${ VSub_Name cube_include_name_base) (.sh) ) } ) ] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (../) (${ VSub_Name cube_include_name))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_echo)} {(DQ ('Including ') (${ VSub_Name cube_include_name) (' cube...'))}) (C {(.)} {(DQ (../) (${ VSub_Name cube_include_name))}) ] ) (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name cube_include_name) (.sh))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(cube_echo)} {(DQ ('Including ') (${ VSub_Name cube_include_name) (' cube...'))}) (C {(.)} {(DQ (../) (${ VSub_Name cube_include_name) (.sh))}) ] ) ] else_action: [ (C {(cube_throw)} { (DQ ('Cube ') (${ VSub_Name cube_include_name) (' not found (did you upload it with -i ') (${ VSub_Name cube_include_name) (' ?).') ) } ) ] ) ] ) ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:cubevar_api_post_restart) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:cubevar_api_roles) op:Equal rhs:{(DQ )})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name POSIXCUBE_APIS_ONLY))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_debug) op:Equal rhs:{(0)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_quiet) op:Equal rhs:{(0)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_skip_init) op:Equal rhs:{(0)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_keep_exec) op:Equal rhs:{(0)})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_skip_host_errors) op: Equal rhs: {(0)} ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_hosts) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_cubes) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_include_cubes) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_envar_scripts) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_envar_scripts_password) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_user) op: Equal rhs: {(DQ (${ VSub_Name USER))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cubedir) op: Equal rhs: {(DQ ('~/posixcubes/'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_roles) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_options) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_specfile) op: Equal rhs: {(DQ (./cubespecs.ini))} ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_parallel) op:Equal rhs:{(0)})] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_async_cubes) op:Equal rhs:{(0)})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_default_envars) op: Equal rhs: {(DQ ('envars*sh envars*sh.enc'))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} { (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(cube_shell)})]) left_token: <Left_CommandSub '$('> ) } {(-eq)} {(${ VSub_Name POSIXCUBE_SHELL_BASH)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_parallel) op: Equal rhs: {(64)} ) ] ) ] ) ] ) (command.FuncDef name: p666_show_version body: (command.BraceGroup children: [ (C {(p666_printf)} { (DQ ('posixcube.sh version ') (${ VSub_Name POSIXCUBE_VERSION) (Lit_Other '\\') (n) ) } ) ] ) ) (command.FuncDef name: p666_printf body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_printf_str) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (C {(shift)}) (C {(printf)} { (DQ ('[') (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(date)})]) left_token: <Left_CommandSub '$('> ) ('] ') (${ VSub_Name p666_printf_str) ) } {(DQ (${ VSub_At '@'))} ) ] ) ) (command.FuncDef name: p666_printf_error body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_printf_str) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (C {(shift)}) (command.SimpleCommand words: [ {(printf)} { (DQ (Lit_Other '\\') ('n[') (word_part.CommandSubPart command_list: (command.CommandList children:[(C {(date)})]) left_token: <Left_CommandSub '$('> ) ('] ') (${ VSub_Name POSIXCUBE_COLOR_RED) (Error) (${ VSub_Name POSIXCUBE_COLOR_RESET) (': ') (${ VSub_Name p666_printf_str) (Lit_Other '\\') (n) (Lit_Other '\\') (n) ) } {(DQ (${ VSub_At '@'))} ] redirects: [(redir.Redir op:<Redir_GreatAnd '1>&'> fd:1 arg_word:{(2)})] ) ] ) ) (command.FuncDef name: p666_exit body: (command.BraceGroup children: [ (command.ForEach iter_name: p666_envar_script iter_words: [{(${ VSub_Name p666_envar_scripts)}] do_arg_iter: F body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_script_enc_matches) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(expr)} {(${ VSub_Name p666_envar_script)} {(Lit_Other ':')} {(SQ <'.*\\.dec$'>)} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_envar_script_enc_matches)} {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.SimpleCommand words: [{(rm)} {(DQ (${ VSub_Name p666_envar_script))}] redirects: [ (redir.Redir op: <Redir_Great '2>'> fd: 2 arg_word: {(/dev/null)} ) ] ) ] ) ] ) ] ) ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_keep_exec)} {(-eq)} {(0)} {(Lit_Other ']')} ) (command.SimpleCommand words: [{(rm)} {(-f)} {(DQ (${ VSub_Name p666_script))}] redirects: [(redir.Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) ] ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(${ VSub_Number 1)} ) ] ) ) (command.FuncDef name: p666_install body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_func_result) op: Equal rhs: {(0)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-d)} {(DQ (/etc/bash_completion.d/))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_autocomplete_file) op: Equal rhs: {(/etc/bash_completion.d/posixcube_completion.sh)} ) ] ) (command.Pipeline children: [ (command.SimpleCommand words: [{(cat)}] redirects: [ (redir.HereDoc op: <Redir_DLess '<<'> fd: 16777215 here_begin: {(SQ <HEREDOC>)} here_end_span_id: 7800 stdin_parts: [ ('_posixcube_complete() {\n') (' COMPREPLY=()\n') (' cur="${COMP_WORDS[COMP_CWORD]}"\n') (' prev="${COMP_WORDS[COMP_CWORD-1]}"\n') (' case "${prev}" in\n') (' \\-h)\n') (' p666_host_list=$({ \n') ( ' for c in /etc/ssh_config /etc/ssh/ssh_config ~/.ssh/config\n' ) ( " do [ -r $c ] && sed -n -e 's/^Host[[:space:]]//p' -e 's/^[[:space:]]*HostName[[:space:]]//p' $c\n" ) (' done\n') ( ' for k in /etc/ssh_known_hosts /etc/ssh/ssh_known_hosts ~/.ssh/known_hosts\n' ) ( " do [ -r $k ] && egrep -v '^[#\\[]' $k|cut -f 1 -d ' '|sed -e 's/[,:].*//g'\n" ) (' done\n') ( " sed -n -e 's/^[0-9][0-9\\.]*//p' /etc/hosts; }|tr ' ' '\\n'|grep -v '*')\n" ) ( ' COMPREPLY=( $(compgen -W "${p666_host_list}" -- $cur))\n' ) (' ;;\n') (' \\-z)\n') ( ' p666_complete_specs="$(sed \'s/=.*//g\' cubespecs.ini)"\n' ) ( ' COMPREPLY=( $(compgen -W "${p666_complete_specs}" -- $cur))\n' ) (' ;;\n') (' *)\n') (' ;;\n') (' esac\n') (' return 0\n') ('}\n') ( 'complete -o default -F _posixcube_complete posixcube.sh\n' ) ] ) ] ) (command.SimpleCommand words: [{(tee)} {(${ VSub_Name p666_autocomplete_file)}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(/dev/null)} ) ] ) ] negated: F ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_func_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_func_result)} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(chmod)} {(Lit_Other '+') (x)} {(${ VSub_Name p666_autocomplete_file)} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_func_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_func_result)} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(.)} {(${ VSub_Name p666_autocomplete_file)}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_func_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_func_result)} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(p666_printf)} { (DQ ( 'Installed Bash programmable completion script into ' ) (${ VSub_Name p666_autocomplete_file) (Lit_Other '\\') (n) ) } ) ] ) ] else_action: [ (C {(p666_printf)} { (DQ ('Could not execute ') (${ VSub_Name p666_autocomplete_file) (Lit_Other '\\') (n) ) } ) ] ) ] ) ] else_action: [ (C {(p666_printf)} { (DQ ('Could not chmod +x ') (${ VSub_Name p666_autocomplete_file) (Lit_Other '\\') (n) ) } ) ] ) ] ) ] else_action: [ (C {(p666_printf)} { (DQ ('Could not create ') (${ VSub_Name p666_autocomplete_file) (Lit_Other '\\') (n) ) } ) (C {(p666_printf)} { (DQ ('You may need to try with sudo. For example:') (Lit_Other '\\') (n) ) } ) (C {(p666_printf)} { (DQ (' sudo ') (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(cube_current_script_abs_path)})] ) left_token: <Left_CommandSub '$('> ) (' -b && . ') (${ VSub_Name p666_autocomplete_file) (Lit_Other '\\') (n) ) } ) (C {(p666_printf)} { (DQ ( 'You only need to source the command the first time. Subsequent shells will automatically source it.' ) (Lit_Other '\\') (n) ) } ) ] ) ] ) ] else_action: [ (C {(p666_printf)} { (DQ ( 'No directory /etc/bash_completion.d/ found, skipping Bash programmable completion installation.' ) (Lit_Other '\\') (n) ) } ) ] ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(${ VSub_Name p666_func_result)} ) ] ) ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_all_hosts) op:Equal rhs:{(DQ )})] ) (command.FuncDef name: p666_process_hostname body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_hostname_wildcard) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(expr)} {(DQ (${ VSub_Number 1))} {(Lit_Other ':')} {(SQ <'.*\\*.*'>)} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_hostname_wildcard)} {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_all_hosts))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_all_hosts) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.BraceGroup children: [ (command.ForEach iter_name: c iter_words: [ {(/etc/ssh_config)} {(/etc/ssh/ssh_config)} { (word_part.TildeSubPart token: <Lit_TildeLike '~'> ) (/.ssh/config) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-r)} { ($ VSub_DollarName '$c') } {(Lit_Other ']')} ) (C {(sed)} {(-n)} {(-e)} { (SQ < 's/^Host[[:space:]]//p' > ) } {(-e)} {(SQ <'s/^[[:space:]]*HostName[[:space:]]//p'>)} {($ VSub_DollarName '$c')} ) ] ) ] ) ) (command.ForEach iter_name: k iter_words: [ {(/etc/ssh_known_hosts)} {(/etc/ssh/ssh_known_hosts)} { (word_part.TildeSubPart token: <Lit_TildeLike '~'> ) (/.ssh/known_hosts) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-r)} { ($ VSub_DollarName '$k') } {(Lit_Other ']')} ) (command.Pipeline children: [ (C {(egrep)} {(-v)} {(SQ <'^[#\\[]'>)} {($ VSub_DollarName '$k')} ) (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ <' '>)} ) (C {(sed)} {(-e)} {(SQ <'s/[,:].*//g'>)} ) ] negated: F ) ] ) ] ) ) (command.Sentence child: (C {(sed)} {(-n)} {(-e)} {(SQ <'s/^[0-9][0-9\\.]*//p'>)} {(/etc/hosts)} ) terminator: <Op_Semi ';'> ) ] ) (C {(tr)} {(SQ <'\\n'>)} {(SQ <' '>)}) (C {(grep)} {(-v)} {(SQ <'*'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_process_hostname_search) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(printf)} {(DQ (${ VSub_Number 1))}) (C {(sed)} {(SQ <'s/\\*/\\.\\*/g'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_process_hostname_list) op: Equal rhs: {(DQ )} ) ] ) (command.ForEach iter_name: p666_all_host iter_words: [{(${ VSub_Name p666_all_hosts)}] do_arg_iter: F body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_all_host_match) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(expr)} {(${ VSub_Name p666_all_host)} {(Lit_Other ':')} {(${ VSub_Name p666_process_hostname_search)} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_all_host_match)} {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_process_hostname_list ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} { (DQ (${ VSub_Name p666_process_hostname_list ) ) } {(DQ (${ VSub_Name p666_all_host))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) ] ) ] ) ) (C {(echo)} {(DQ (${ VSub_Name p666_process_hostname_list))}) ] ) ] else_action: [(C {(echo)} {(DQ (${ VSub_Number 1))})] ) ] ) ) (command.FuncDef name: p666_process_options body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:OPTIND) op:Equal rhs:{(1)})] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (C {(getopts)} {(DQ ('?vdqbskyah:u:c:e:p:w:r:o:z:i:'))} {(p666_opt)} {(DQ (${ VSub_At '@'))} ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ VSub_DollarName '$p666_opt'))} arms: [ (case_arm pat_list: [ {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\?'>)} ] action: [(C {(p666_show_usage)})] ) (case_arm pat_list: [{(v)}] action: [ (C {(p666_show_version)}) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] ) (case_arm pat_list: [{(d)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_debug) op: Equal rhs: {(1)} ) ] ) ] ) (case_arm pat_list: [{(q)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_quiet) op: Equal rhs: {(1)} ) ] ) ] ) (case_arm pat_list: [{(s)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_skip_init) op: Equal rhs: {(1)} ) ] ) ] ) (case_arm pat_list: [{(k)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_keep_exec) op: Equal rhs: {(1)} ) ] ) ] ) (case_arm pat_list: [{(y)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_skip_host_errors) op: Equal rhs: {(1)} ) ] ) ] ) (case_arm pat_list: [{(a)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_async_cubes) op: Equal rhs: {(1)} ) ] ) ] ) (case_arm pat_list: [{(b)}] action: [(C {(p666_install)})] ) (case_arm pat_list: [{(h)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_processed_hostname) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(p666_process_hostname)} {(DQ (${ VSub_Name OPTARG))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_processed_hostname))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_hosts) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} {(DQ (${ VSub_Name p666_hosts))} {(DQ (${ VSub_Name p666_processed_hostname))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) ] else_action: [ (C {(p666_printf_error)} { (DQ ('No known hosts match ') (${ VSub_Name OPTARG) (' from ') (${ VSub_Name p666_all_hosts) ) } ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] ) ] ) (case_arm pat_list: [{(c)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cubes) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} {(DQ (${ VSub_Name p666_cubes))} {(DQ (${ VSub_Name OPTARG))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) (case_arm pat_list: [{(i)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_include_cubes) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} {(DQ (${ VSub_Name p666_include_cubes))} {(DQ (${ VSub_Name OPTARG))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) (case_arm pat_list: [{(e)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(KW_Bang '!')} {(-r)} {(DQ (${ VSub_Name OPTARG))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(p666_printf_error)} { (DQ ('Could not find ') (${ VSub_Name OPTARG) (' ENVAR script.') ) } ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_scripts) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} {(DQ (${ VSub_Name p666_envar_scripts))} {(DQ (${ VSub_Name OPTARG))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) (case_arm pat_list: [{(u)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_user) op: Equal rhs: {(DQ (${ VSub_Name OPTARG))} ) ] ) ] ) (case_arm pat_list: [{(p)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_scripts_password) op: Equal rhs: {(DQ (${ VSub_Name OPTARG))} ) ] ) ] ) (case_arm pat_list: [{(w)}] action: [ (command.AndOr ops: [Op_DPipe] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_envar_scripts_password ) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cat)} {(${ VSub_Name OPTARG)}) ] ) left_token: <Left_CommandSub '$('> ) ) } ) ] ) (C {(cube_check_return)}) ] ) ] ) (case_arm pat_list: [{(r)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_roles) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} {(DQ (${ VSub_Name p666_roles))} {(DQ (${ VSub_Name OPTARG))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) (case_arm pat_list: [{(o)}] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_option_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name OPTARG))}) (C {(sed)} {(SQ <'s/=.*//'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_option_value) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name OPTARG))}) (C {(sed)} { (DQ ('s/^') (${ VSub_Name p666_option_name) ('=//') ) } ) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_option_value) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(p666_process_hostname)} {(DQ (${ VSub_Name p666_option_value))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_options) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} {(DQ (${ VSub_Name p666_options))} { (DQ (${ VSub_Name p666_option_name) ('=') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) (${ VSub_Name p666_option_value) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } {(DQ (${ VSub_Name POSIXCUBE_NEWLINE))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) (case_arm pat_list: [{(z)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name p666_specfile))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_foundspec) op: Equal rhs: {(0)} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_foundspec_names) op: Equal rhs: {(DQ )} ) ] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (C {(read)} {(p666_specfile_line)}) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_specfile_line_name ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} { (DQ (${ VSub_Name p666_specfile_line ) ) } ) (C {(sed)} {(SQ <'s/=.*//'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_foundspec_names ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} { (DQ (${ VSub_Name p666_foundspec_names ) ) } {(DQ (${ VSub_Name p666_specfile_line_name))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} { (DQ (${ VSub_Name p666_specfile_line_name ) ) } {(Lit_Other '=')} {(DQ (${ VSub_Name OPTARG))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_foundspec ) op: Equal rhs: {(1)} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_specfile_line_value ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} { (DQ (${ VSub_Name p666_specfile_line ) ) } ) (C {(sed)} { (DQ ('s/^') (${ VSub_Name p666_specfile_line_name ) ('=//') ) } ) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (C {(p666_process_options)} { (${ VSub_Name p666_specfile_line_value ) } ) (command.ControlFlow token: <ControlFlow_Break break> ) ] ) ] ) ] ) redirects: [ (redir.Redir op: <Redir_Less '<'> fd: 16777215 arg_word: {(DQ (${ VSub_Name p666_specfile))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_foundspec)} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(p666_printf_error)} { (DQ ('Could not find ') (${ VSub_Name OPTARG) (' in ') (${ VSub_Name p666_specfile) (' file with specs ') (${ VSub_Name p666_foundspec_names) ) } ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] ) ] ) ] ) ] else_action: [ (C {(p666_printf_error)} { (DQ ('Could not find ') (${ VSub_Name p666_specfile) (' file') ) } ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] ) ] ) ] ) ] ) ) ] ) ) (C {(p666_process_options)} {(DQ (${ VSub_At '@'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_envar_scripts_password))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(-r)} {(word_part.TildeSubPart token:<Lit_TildeLike '~'>) (/.posixcube.pwd)} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_scripts_password) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cat)} {(word_part.TildeSubPart token:<Lit_TildeLike '~'>) (/.posixcube.pwd) } ) ] ) left_token: <Left_CommandSub '$('> ) ) } ) ] ) (C {(cube_check_return)}) ] ) ] ) ] ) (C {(shift)} { (word_part.ArithSubPart anode: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithWord w:{(${ VSub_Name OPTIND)}) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) } ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$1'))} {(Lit_Other '=')} {(DQ (--))} {(Lit_Other ']')} ) (C {(shift)}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_envar_scripts))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_scripts) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.SimpleCommand words: [{(ls)} {(-1)} {(${ VSub_Name p666_default_envars)}] redirects: [ (redir.Redir op: <Redir_Great '2>'> fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(paste)} {(-sd)} {(SQ <' '>)} {(-)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) ) } ) ] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_envar_scripts))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')}) (C {(p666_printf)} { (DQ ('Using ENVAR files: ') (${ VSub_Name p666_envar_scripts) (Lit_Other '\\') (n) ) } ) ] ) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_commands) op: Equal rhs: {(DQ (${ VSub_At '@'))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_hosts))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_commands))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Case to_match: {(DQ (${ VSub_Number 1))} arms: [ (case_arm pat_list: [{(edit)} {(show)} {(source)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_envar_scripts))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.ForEach iter_name: p666_envar_script iter_words: [{(${ VSub_Name p666_envar_scripts)}] do_arg_iter: F body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_envar_scripts_enc ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(expr)} { (${ VSub_Name p666_envar_script ) } {(Lit_Other ':')} {(SQ <'.*enc$'>)} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} { (${ VSub_Name p666_envar_scripts_enc ) } {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(gpg)} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_envar_script_new ) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} { (DQ (${ VSub_Name p666_envar_script ) ) } ) (C {(sed)} { (SQ < 's/enc$/dec/g' > ) } ) ] negated: F ) ] ) left_token: <Left_CommandSub '$(' > ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} { (DQ (${ VSub_Name p666_envar_scripts_password ) ) } {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(p666_printf)} { (DQ ( 'Enter the password for ' ) (${ VSub_Name p666_envar_script) (':') (Lit_Other '\\') (n) ) } ) (command.AndOr ops: [Op_DPipe] children: [ (C {(gpg)} {(--output)} { (DQ (${ VSub_Name p666_envar_script_new ) ) } {(--yes)} {(--decrypt)} {(DQ (${ VSub_Name p666_envar_script))} ) (C { ( cube_check_return ) } ) ] ) ] ) ] else_action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (${ VSub_Name p666_debug ) } {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Decrypting ') (${ VSub_Name p666_envar_script ) (' ...') (Lit_Other '\\') (n) ) } ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_gpg_output ) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C { ( echo ) } {(DQ (${ VSub_Name p666_envar_scripts_password))} ) (command.SimpleCommand words: [ { ( gpg ) } { ( --passphrase-fd ) } { ( 0 ) } { ( --batch ) } { ( --yes ) } { ( --output ) } { (DQ (${ VSub_Name p666_envar_script_new ) ) } { ( --decrypt ) } { (DQ (${ VSub_Name p666_envar_script ) ) } ] redirects: [ (redir.Redir op: < Redir_GreatAnd '2>&' > fd: 2 arg_word: { ( 1 ) } ) ] ) ] negated: F ) ] ) left_token: < Left_CommandSub '$(' > ) ) } ) ] ) (C {(cube_check_return)} { (DQ (${ VSub_Name p666_gpg_output ) ) } ) ] ) ] ) (command.Case to_match: {(DQ (${ VSub_Number 1))} arms: [ (case_arm pat_list: [{(show)}] action: [ (C {(p666_printf)} { (DQ ('Contents of ') (${ VSub_Name p666_envar_script ) (':') (Lit_Other '\\') (n) ) } ) (C {(cat)} { (DQ (${ VSub_Name p666_envar_script_new ) ) } ) ] ) (case_arm pat_list: [{(source)}] action: [ (C {(chmod)} {(u) (Lit_Other '+') (x)} {(DQ (${ VSub_Name p666_envar_script_new))} ) (C {(.)} { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (C { ( cube_readlink ) } {(DQ (${ VSub_Name p666_envar_script_new))} ) ] ) left_token: < Left_CommandSub '$(' > ) ) } ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (${ VSub_Name p666_debug ) } {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Sourced ') (${ VSub_Name p666_envar_script ) (...) (Lit_Other '\\') (n) ) } ) ] ) ] ) (case_arm pat_list: [{(edit)}] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C { (DQ (word_part.BracedVarSub token: < VSub_Name EDITOR > suffix_op: (suffix_op.StringUnary op_id: VTest_ColonHyphen arg_word: {(vi)} ) ) ) } {(DQ (${ VSub_Name p666_envar_script_new))} ) (C { ( cube_check_return ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C { ( Lit_Other '[' ) } {(DQ (${ VSub_Name p666_envar_scripts_password))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(p666_printf)} { (DQ ( 'Enter the password to re-encrypt ' ) (${ VSub_Name p666_envar_script) (':') (Lit_Other '\\') (n) ) } ) (command.AndOr ops: [Op_DPipe] children: [ (C {(gpg)} {(--yes)} {(--s2k-mode)} {(3)} {(--s2k-count)} {(65536)} {(--force-mdc)} {(--cipher-algo)} {(AES256)} { ( --s2k-digest-algo ) } {(SHA512)} {(-o)} {(DQ (${ VSub_Name p666_envar_script))} {(--symmetric)} { (DQ (${ VSub_Name p666_envar_script_new ) ) } ) (C { ( cube_check_return ) } ) ] ) ] ) ] else_action: [ (command.AndOr ops: [Op_DAmp] children: [ (C { (Lit_Other '[' ) } {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ( 'Re-encrypting ' ) (${ VSub_Name p666_envar_script) (' ...') (Lit_Other '\\') (n) ) } ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_gpg_output ) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C { ( echo ) } {(DQ (${ VSub_Name p666_envar_scripts_password))} ) (command.SimpleCommand words: [ { ( gpg ) } { ( --batch ) } { ( --passphrase-fd ) } { ( 0 ) } { ( --yes ) } { ( --no-use-agent ) } { ( --s2k-mode ) } { ( 3 ) } { ( --s2k-count ) } { ( 65536 ) } { ( --force-mdc ) } { ( --cipher-algo ) } { ( AES256 ) } { ( --s2k-digest-algo ) } { ( SHA512 ) } { ( -o ) } { (DQ (${ VSub_Name p666_envar_script ) ) } { ( --symmetric ) } { (DQ (${ VSub_Name p666_envar_script_new ) ) } ] redirects: [ (redir.Redir op: < Redir_GreatAnd '2>&' > fd: 2 arg_word: { ( 1 ) } ) ] ) ] negated: F ) ] ) left_token: < Left_CommandSub '$(' > ) ) } ) ] ) (C { ( cube_check_return ) } {(DQ (${ VSub_Name p666_gpg_output))} ) ] ) ] ) ] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (C {(p666_show_usage)} { (DQ ( 'Not implemented' ) ) } ) ] ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(rm)} {(-f)} { (DQ (${ VSub_Name p666_envar_script_new ) ) } ) (C {(cube_check_return)}) ] ) ] ) ] else_action: [ (C {(p666_show_usage)} { (DQ ( 'gpg program not found on the PATH' ) ) } ) ] ) ] ) ] else_action: [ (command.Case to_match: {(DQ (${ VSub_Number 1))} arms: [ (case_arm pat_list: [{(show)}] action: [ (command.Pipeline children: [ (C {(cat)} { (DQ (${ VSub_Name p666_envar_script ) ) } ) (C {(grep)} {(-v)} { (DQ ('^#!/bin/sh') (Lit_Other '$') ) } ) ] negated: F ) ] ) (case_arm pat_list: [{(source)}] action: [ (C {(.)} { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_readlink)} { (DQ (${ VSub_Name p666_envar_script ) ) } ) ] ) left_token: <Left_CommandSub '$('> ) ) } ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Sourced ') (${ VSub_Name p666_envar_script ) (...) (Lit_Other '\\') (n) ) } ) ] ) ] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (C {(p666_show_usage)} {(DQ ('Not implemented'))} ) ] ) ] ) ] ) ] ) ) (command.Case to_match: {(DQ (${ VSub_Number 1))} arms: [ (case_arm pat_list: [{(source)}] action: [(C {(true)})] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(0)} ) ] ) ] ) ] ) ] else_action: [ (C {(p666_show_usage)} { (DQ ('Sub-COMMAND without -e ENVAR file and ') (${ VSub_Name p666_default_envars) (' not found.') ) } ) ] ) (command.Case to_match: {(DQ (${ VSub_Number 1))} arms: [ (case_arm pat_list: [{(source)}] action: [(C {(true)})] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(0)} ) ] ) ] ) ] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (C {(p666_show_usage)} {(DQ ('Unknown sub-COMMAND ') (${ VSub_Number 1))} ) ] ) ] ) ] ) ] else_action: [ (C {(p666_show_usage)} {(DQ ('No hosts specified with -h and no sub-COMMAND specified.'))} ) ] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name POSIXCUBE_SOURCED))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_commands))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_cubes))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [(C {(p666_show_usage)} {(DQ ('No COMMANDs or CUBEs specified.'))})] ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')}) (C {(p666_show_version)}) ] ) (command.FuncDef name: p666_handle_remote_response body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_handle_remote_response_context) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_handle_remote_response_context))} {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_handle_remote_response_context ) op: Equal rhs: {(DQ ('Last command'))} ) ] ) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_host_output_color) op: Equal rhs: {(${ VSub_Name POSIXCUBE_COLOR_GREEN)} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_host_output) op: Equal rhs: {(DQ )} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_host_output_result)} {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_host_output_color) op: Equal rhs: {(${ VSub_Name POSIXCUBE_COLOR_RED)} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_host_output) op: Equal rhs: { (DQ (${ VSub_Name p666_handle_remote_response_context) (' failed with return code ') (${ VSub_Name p666_host_output_result) ) } ) ] ) ] ) ] else_action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_host_output) op: Equal rhs: {(DQ ('Commands succeeded.'))} ) ] ) ] ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_host_output))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('[') (${ VSub_Name p666_host_output_color) (${ VSub_Name p666_host) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] %s') (Lit_Other '\\') (n) ) } {(DQ (${ VSub_Name p666_host_output))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_host_output_result)} {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(p666_exit)} {(${ VSub_Name p666_host_output_result)})] ) ] ) ] ) ) (command.FuncDef name: p666_remote_ssh body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_remote_ssh_commands) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('[') (${ VSub_Name POSIXCUBE_COLOR_GREEN) (${ VSub_Name p666_host) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] Executing ssh ') (${ VSub_Name p666_user) ('@') (${ VSub_Name p666_host) (' ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name p666_remote_ssh_commands) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ...') (Lit_Other '\\') (n) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_parallel)} {(-gt)} {(0)} {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(${ VSub_Name p666_async)} {(-eq)} {(1)} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (command.SimpleCommand words: [ {(ssh)} {(-o)} {(Lit_VarLike 'ConnectTimeout=') (10)} {(${ VSub_Name p666_user) (Lit_Other '@') (${ VSub_Name p666_host) } {(${ VSub_Name p666_remote_ssh_commands)} ] redirects: [ (redir.Redir op: <Redir_GreatAnd '2>&'> fd: 2 arg_word: {(1)} ) ] ) terminator: <Op_Amp '&'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_wait_pids) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} {(DQ (${ VSub_Name p666_wait_pids))} {(DQ ($ VSub_Bang '$!'))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) ] else_action: [ (command.SimpleCommand words: [ {(ssh)} {(-o)} {(Lit_VarLike 'ConnectTimeout=') (10)} {(${ VSub_Name p666_user) (Lit_Other '@') (${ VSub_Name p666_host)} {(${ VSub_Name p666_remote_ssh_commands)} ] redirects: [ (redir.Redir op: <Redir_GreatAnd '2>&'> fd: 2 arg_word: {(1)} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_host_output_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Finished executing on ') (${ VSub_Name p666_host) (Lit_Other '\\') (n) ) } ) ] ) (C {(p666_handle_remote_response)} {(DQ ('Remote commands through SSH'))} ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(${ VSub_Name p666_host_output_result)} ) ] ) ] ) ) (command.FuncDef name: p666_remote_transfer body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_remote_transfer_source) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_remote_transfer_dest) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('[') (${ VSub_Name POSIXCUBE_COLOR_GREEN) (${ VSub_Name p666_host) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] Executing rsync ') (${ VSub_Name p666_remote_transfer_source) (' to ') (${ VSub_Name p666_user) ('@') (${ VSub_Name p666_host) (':') (${ VSub_Name p666_remote_transfer_dest) (' ...') (Lit_Other '\\') (n) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_parallel)} {(-gt)} {(0)} {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(${ VSub_Name p666_async)} {(-eq)} {(1)} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Rsyncing in background: ') (${ VSub_Name p666_remote_transfer_source) (' ') (${ VSub_Name p666_user) ('@') (${ VSub_Name p666_host) (':') (${ VSub_Name p666_remote_transfer_dest) (Lit_Other '\\') (n) ) } ) ] ) (command.Sentence child: (C {(rsync)} {(-rlpt)} {(${ VSub_Name p666_remote_transfer_source)} { (DQ (${ VSub_Name p666_user) ('@') (${ VSub_Name p666_host) (':') (${ VSub_Name p666_remote_transfer_dest) ) } ) terminator: <Op_Amp '&'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_wait_pids) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} {(DQ (${ VSub_Name p666_wait_pids))} {(DQ ($ VSub_Bang '$!'))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) ] ) ] else_action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Rsyncing in foreground: ') (${ VSub_Name p666_remote_transfer_source) (' ') (${ VSub_Name p666_user) ('@') (${ VSub_Name p666_host) (':') (${ VSub_Name p666_remote_transfer_dest) (Lit_Other '\\') (n) ) } ) ] ) (C {(rsync)} {(-rlpt)} {(${ VSub_Name p666_remote_transfer_source)} { (DQ (${ VSub_Name p666_user) ('@') (${ VSub_Name p666_host) (':') (${ VSub_Name p666_remote_transfer_dest) ) } ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_host_output_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (C {(p666_handle_remote_response)} {(DQ (rsync))}) ] ) ] ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cubedir) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name p666_cubedir> suffix_op: (suffix_op.StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /)} ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_name) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(cube_current_script_name)})] ) left_token: <Left_CommandSub '$('> ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_path) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [(C {(cube_current_script_abs_path)})] ) left_token: <Left_CommandSub '$('> ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_remote_script) op: Equal rhs: {(DQ (${ VSub_Name p666_cubedir) (/) (${ VSub_Name p666_script_name))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_contents) op: Equal rhs: { (DQ ('cube_initial_directory=') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\$'> ) ('{PWD}') ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_envar_contents) op: Equal rhs: {(DQ )} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_scripts_final) op: Equal rhs: {(DQ )} ) ] ) (command.ForEach iter_name: p666_envar_script iter_words: [{(${ VSub_Name p666_envar_scripts)}] do_arg_iter: F body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_script_remove) op: Equal rhs: {(0)} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_script_enc_matches) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(expr)} {(${ VSub_Name p666_envar_script)} {(Lit_Other ':')} {(SQ <'.*\\.enc$'>)} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_envar_script_enc_matches)} {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(cube_command_exists)} {(gpg)}) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Decrypting ') (${ VSub_Name p666_envar_script) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_script_new) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} { (DQ (${ VSub_Name p666_envar_script ) ) } ) (C {(sed)} {(SQ <'s/enc$/dec/g'>)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} { (DQ (${ VSub_Name p666_envar_scripts_password ) ) } {(Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(p666_printf)} { (DQ ('Enter the password for ') (${ VSub_Name p666_envar_script) (':') (Lit_Other '\\') (n) ) } ) (command.AndOr ops: [Op_DPipe] children: [ (C {(gpg)} {(--output)} {(DQ (${ VSub_Name p666_envar_script_new))} {(--yes)} {(--decrypt)} {(DQ (${ VSub_Name p666_envar_script))} ) (C {(cube_check_return)}) ] ) ] ) ] else_action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Decrypting ') (${ VSub_Name p666_envar_script) (' ...') (Lit_Other '\\') (n) ) } ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_gpg_output ) op: Equal rhs: { (DQ (word_part.CommandSubPart command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} { (DQ (${ VSub_Name p666_envar_scripts_password ) ) } ) (command.SimpleCommand words: [ {(gpg)} {(--passphrase-fd)} {(0)} {(--batch)} {(--yes)} {(--output)} { (DQ (${ VSub_Name p666_envar_script_new ) ) } {(--decrypt)} { (DQ (${ VSub_Name p666_envar_script ) ) } ] redirects: [ (redir.Redir op: <Redir_GreatAnd '2>&' > fd: 2 arg_word: {(1)} ) ] ) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> ) ) } ) ] ) (C {(cube_check_return)} {(DQ (${ VSub_Name p666_gpg_output))} ) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_script) op: Equal rhs: {(DQ (${ VSub_Name p666_envar_script_new))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_envar_script_remove ) op: Equal rhs: {(1)} ) ] ) ] ) ] else_action: [ (C {(p666_printf_error)} {(DQ ('gpg program not found on the PATH'))} ) (C {(p666_exit)} {(1)}) ] ) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_scripts_final) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(cube_append_str)} {(DQ (${ VSub_Name p666_envar_scripts_final))} {(DQ (${ VSub_Name p666_envar_script))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (C {(chmod)} {(u) (Lit_Other '+') (x)} {(DQ (${ VSub_Name p666_envar_script))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_contents) op: Equal rhs: { (DQ (${ VSub_Name p666_script_contents) ('\n') ('cd ') (${ VSub_Name p666_cubedir) ('/ || cube_check_return\n') ('. ') (${ VSub_Name p666_cubedir) (/) (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(${ VSub_Name p666_envar_script)}) ] ) left_token: <Left_CommandSub '$('> ) (' || cube_check_return') ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_envar_script_remove)} {(-eq)} {(1)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_contents) op: Equal rhs: { (DQ (${ VSub_Name p666_script_contents) ('\n') ('rm -f ') (${ VSub_Name p666_cubedir) (/) (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(${ VSub_Name p666_envar_script)} ) ] ) left_token: <Left_CommandSub '$('> ) (' || cube_check_return') ) } ) ] ) ] ) ] ) ] ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_envar_scripts) op: Equal rhs: {(DQ (${ VSub_Name p666_envar_scripts_final))} ) ] ) (command.ForEach iter_name: p666_cube iter_words: [{(${ VSub_Name p666_cubes)}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-d)} {(DQ (${ VSub_Name p666_cube))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name p666_cube))}) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} { (DQ (${ VSub_Name p666_cube) (/) (${ VSub_Name p666_cube_name) (.sh) ) } {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(chmod)} {(u) (Lit_Other '+') (x)} {(${ VSub_Name p666_cube) (/) (Lit_Other '*') (.sh)} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name p666_cube> suffix_op: (suffix_op.StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /)} ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_contents) op: Equal rhs: { (DQ (${ VSub_Name p666_script_contents) ('\n') ('cd ') (${ VSub_Name p666_cubedir) (/) (${ VSub_Name p666_cube) ('/ || cube_check_return\n') ('cube_echo ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ('Started cube: ') (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ('\n') ('POSIXCUBE_CUBE_NAME=') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' POSIXCUBE_CUBE_NAME_WITH_PREFIX=') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) (' ') (${ VSub_Name p666_cube_name) (.sh) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' . ') (${ VSub_Name p666_cubedir) (/) (${ VSub_Name p666_cube) (/) (${ VSub_Name p666_cube_name) ('.sh || cube_check_return ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('Last command in cube') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ('\n') ('cube_echo ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('Finished cube: ') (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('\n') ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name p666_cube) (/envars.sh))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name: p666_script_envar_contents ) op: Equal rhs: { (DQ (${ VSub_Name p666_script_envar_contents ) ('\n') ('. ') (${ VSub_Name p666_cubedir) (/) (${ VSub_Name p666_cube) ('/envars.sh || cube_check_return ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('Failed loading cube envars') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ('\n') ) } ) ] ) ] ) ] ) ] ) ] else_action: [ (C {(p666_printf_error)} { (DQ ('Could not find ') (${ VSub_Name p666_cube_name) ('.sh in cube ') (${ VSub_Name p666_cube) (' directory.') ) } ) (C {(p666_exit)} {(1)}) ] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name p666_cube))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name p666_cube))}) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (C {(chmod)} {(u) (Lit_Other '+') (x)} {(DQ (${ VSub_Name p666_cube))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_contents) op: Equal rhs: { (DQ (${ VSub_Name p666_script_contents) ('\n') ('cd ') (${ VSub_Name p666_cubedir) ('/ || cube_check_return\n') ('cube_echo ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('Started cube: ') (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('\n') ('POSIXCUBE_CUBE_NAME=') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) (' POSIXCUBE_CUBE_NAME_WITH_PREFIX=') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' . ') (${ VSub_Name p666_cubedir) (/) (${ VSub_Name p666_cube_name) (' || cube_check_return ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ('Last command in cube') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('\n') ('cube_echo ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('Finished cube: ') (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('\n') ) } ) ] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name p666_cube) (.sh))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name p666_cube) (.sh))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (C {(chmod)} {(u) (Lit_Other '+') (x)} {(DQ (${ VSub_Name p666_cube) (.sh))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_contents) op: Equal rhs: { (DQ (${ VSub_Name p666_script_contents) ('\n') ('cd ') (${ VSub_Name p666_cubedir) ('/ || cube_check_return\n') ('cube_echo ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('Started cube: ') (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('\n') ('POSIXCUBE_CUBE_NAME=') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) (' POSIXCUBE_CUBE_NAME_WITH_PREFIX=') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' . ') (${ VSub_Name p666_cubedir) (/) (${ VSub_Name p666_cube_name) (' || cube_check_return ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ('Last command in cube') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('\n') ('cube_echo ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('Finished cube: ') (${ VSub_Name p666_cube_name) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('\n') ) } ) ] ) ] ) ] else_action: [ (C {(p666_printf_error)} { (DQ ('Cube ') (${ VSub_Name p666_cube) ( " could not be found as a directory or script, or you don't have read permissions." ) ) } ) (C {(p666_exit)} {(1)}) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_contents) op: Equal rhs: { (DQ (${ VSub_Name p666_script_contents) (${ VSub_Name POSIXCUBE_NEWLINE) ('cd ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{cube_initial_directory}') ) } ) ] ) ] ) ) (command.ForEach iter_name: p666_cube iter_words: [{(${ VSub_Name p666_include_cubes)}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-d)} {(DQ (${ VSub_Name p666_cube))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name p666_cube))}) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} { (DQ (${ VSub_Name p666_cube) (/) (${ VSub_Name p666_cube_name) (.sh) ) } {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(chmod)} {(u) (Lit_Other '+') (x)} {(${ VSub_Name p666_cube) (/) (Lit_Other '*') (.sh)} ) ] ) ] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name p666_cube))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(chmod)} {(u) (Lit_Other '+') (x)} {(DQ (${ VSub_Name p666_cube))} ) ] ) (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name p666_cube) (.sh))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(chmod)} {(u) (Lit_Other '+') (x)} {(DQ (${ VSub_Name p666_cube) (.sh))} ) ] ) ] else_action: [ (C {(p666_printf_error)} { (DQ ('Cube ') (${ VSub_Name p666_cube) ( " could not be found as a directory or script, or you don't have read permissions." ) ) } ) (C {(p666_exit)} {(1)}) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_commands))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script_contents) op: Equal rhs: { (DQ (${ VSub_Name p666_script_contents) ('\n') (' ') (${ VSub_Name p666_commands) ) } ) ] ) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_script) op: Equal rhs: {(DQ (./cube_exec.sh))} ) ] ) (command.SimpleCommand words: [{(cat)}] redirects: [ (redir.HereDoc op: <Redir_DLess '<<'> fd: 16777215 here_begin: {(HEREDOC)} here_end_span_id: 12299 stdin_parts: [ ('#!/bin/sh\n') ('POSIXCUBE_APIS_ONLY=1\n') ('. ') (${ VSub_Name p666_remote_script) ('\n') ('if [ ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\$'> ) ('? -ne 0 ] ; then\n') (' echo ') (Right_DoubleQuote '"') ('Could not source ') (${ VSub_Name p666_remote_script) (' script') (Right_DoubleQuote '"') (' 1>&2\n') (' exit 1\n') ('fi\n') ('\n') ('POSIXCUBE_DEBUG=') (${ VSub_Name p666_debug) ('\n') ('cubevar_api_roles=') (Right_DoubleQuote '"') (${ VSub_Name p666_roles) (Right_DoubleQuote '"') ('\n') (${ VSub_Name p666_script_envar_contents) ('\n') (${ VSub_Name p666_options) ('\n') (${ VSub_Name p666_script_contents) ('\n') ('\n') ('if [ ') (Right_DoubleQuote '"') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\$'> ) ('{cubevar_api_post_restart}') (Right_DoubleQuote '"') (' != ') (Right_DoubleQuote '"') (Right_DoubleQuote '"') (' ]; then\n') (' for p666_post in ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\$'> ) ('{cubevar_api_post_restart}; do\n') (' cube_service restart ') (Right_DoubleQuote '"') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\$'> ) ('{p666_post}') (Right_DoubleQuote '"') ('\n') (' done\n') ('fi\n') ] ) (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ (${ VSub_Name p666_script))} ) ] ) (C {(chmod)} {(Lit_Other '+') (x)} {(DQ (${ VSub_Name p666_script))}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_upload) op: Equal rhs: {(DQ (${ VSub_Name p666_script) (' '))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_cubes))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.ForEach iter_name: p666_cube iter_words: [{(${ VSub_Name p666_cubes)}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-d)} {(DQ (${ VSub_Name p666_cube))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name p666_cube))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} { (DQ (${ VSub_Name p666_cube) (/) (${ VSub_Name p666_cube_name) (.sh) ) } {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name p666_cube> suffix_op: (suffix_op.StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /)} ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_upload) op: Equal rhs: { (DQ (${ VSub_Name p666_upload) (' ') (${ VSub_Name p666_cube) ) } ) ] ) ] ) ] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name p666_cube))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name p666_cube))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_upload) op: Equal rhs: { (DQ (${ VSub_Name p666_upload) (' ') (${ VSub_Name p666_cube) ) } ) ] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name p666_cube) (.sh))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name p666_cube) (.sh))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_upload) op: Equal rhs: { (DQ (${ VSub_Name p666_upload) (' ') (${ VSub_Name p666_cube) (.sh) ) } ) ] ) ] ) ] ) ] ) ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_include_cubes))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.ForEach iter_name: p666_cube iter_words: [{(${ VSub_Name p666_include_cubes)}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-d)} {(DQ (${ VSub_Name p666_cube))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name p666_cube))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} { (DQ (${ VSub_Name p666_cube) (/) (${ VSub_Name p666_cube_name) (.sh) ) } {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube) op: Equal rhs: { (word_part.BracedVarSub token: <VSub_Name p666_cube> suffix_op: (suffix_op.StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /)} ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_upload) op: Equal rhs: { (DQ (${ VSub_Name p666_upload) (' ') (${ VSub_Name p666_cube) ) } ) ] ) ] ) ] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name p666_cube))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name p666_cube))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_upload) op: Equal rhs: { (DQ (${ VSub_Name p666_upload) (' ') (${ VSub_Name p666_cube) ) } ) ] ) ] ) (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ (${ VSub_Name p666_cube) (.sh))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_cube_name) op: Equal rhs: { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(basename)} {(DQ (${ VSub_Name p666_cube) (.sh))} ) ] ) left_token: <Left_CommandSub '$('> ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_upload) op: Equal rhs: { (DQ (${ VSub_Name p666_upload) (' ') (${ VSub_Name p666_cube) (.sh) ) } ) ] ) ] ) ] else_action: [ (C {(p666_printf_error)} {(DQ ('Could not find ') (${ VSub_Name p666_cube))} ) (C {(p666_exit)} {(1)}) ] ) ] ) ) ] ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_quiet)} {(-eq)} {(0)} {(Lit_Other ']')}) (C {(p666_printf)} { (DQ ('Transferring files to hosts: ') (${ VSub_Name p666_hosts) (' ...') (Lit_Other '\\') (n) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_async) op:Equal rhs:{(1)})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_skip_init)} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_wait_pids) op: Equal rhs: {(DQ )} ) ] ) (command.ForEach iter_name: p666_host iter_words: [{(${ VSub_Name p666_hosts)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(p666_remote_ssh)} { (DQ ('[ ! -d ') (word_part.EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) (${ VSub_Name p666_cubedir) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ] && mkdir -p ') (${ VSub_Name p666_cubedir) ('; RC=') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ( '?; command -v rsync >/dev/null 2>&1 || (command -v apt-get >/dev/null 2>&1 && apt-get -y install rsync); exit ' ) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{RC};') ) } ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_wait_pids))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Waiting on initialization PIDs: ') (${ VSub_Name p666_wait_pids) (' ...') (Lit_Other '\\') (n) ) } ) ] ) (C {(wait)} {(${ VSub_Name p666_wait_pids)}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_host_output_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (C {(p666_handle_remote_response)} {(DQ ('Remote commands through SSH'))} ) ] ) ] ) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_wait_pids) op:Equal rhs:{(DQ )})] ) (command.ForEach iter_name: p666_host iter_words: [{(${ VSub_Name p666_hosts)}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_skip_init)} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(p666_remote_transfer)} { (DQ (${ VSub_Name p666_upload) (' ') (${ VSub_Name p666_script_path) (' ') (${ VSub_Name p666_envar_scripts) ) } {(DQ (${ VSub_Name p666_cubedir) (/))} ) ] ) ] else_action: [ (C {(p666_remote_transfer)} { (DQ (${ VSub_Name p666_upload) (' ') (${ VSub_Name p666_envar_scripts) ) } {(DQ (${ VSub_Name p666_cubedir) (/))} ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_wait_pids))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Waiting on transfer PIDs: ') (${ VSub_Name p666_wait_pids) (' ...') (Lit_Other '\\') (n) ) } ) ] ) (C {(wait)} {(${ VSub_Name p666_wait_pids)}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_host_output_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (C {(p666_handle_remote_response)} {(DQ (rsync))}) ] ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:p666_wait_pids) op:Equal rhs:{(DQ )})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_async) op: Equal rhs: {(${ VSub_Name p666_async_cubes)} ) ] ) (command.ForEach iter_name: p666_host iter_words: [{(${ VSub_Name p666_hosts)}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_quiet)} {(-eq)} {(0)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('[') (${ VSub_Name POSIXCUBE_COLOR_GREEN) (${ VSub_Name p666_host) (${ VSub_Name POSIXCUBE_COLOR_RESET) ('] Executing on ') (${ VSub_Name p666_host) (' ...') (Lit_Other '\\') (n) ) } ) ] ) (C {(p666_remote_ssh)} {(DQ ('. ') (${ VSub_Name p666_cubedir) (/) (${ VSub_Name p666_script))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_remote_ssh_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name p666_async)} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DAmp Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_skip_host_errors)} {(-eq)} {(0)} {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(${ VSub_Name p666_remote_ssh_result)} {(-ne)} {(0)} {(Lit_Other ']')} ) (C {(p666_exit)} {(${ VSub_Name p666_remote_ssh_result)}) ] ) ] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name p666_wait_pids))} {(KW_Bang '!') (Lit_Other '=')} {(DQ )} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(${ VSub_Name p666_debug)} {(-eq)} {(1)} {(Lit_Other ']')} ) (C {(p666_printf)} { (DQ ('Waiting on cube execution PIDs: ') (${ VSub_Name p666_wait_pids) (' ...') (Lit_Other '\\') (n) ) } ) ] ) (C {(wait)} {(${ VSub_Name p666_wait_pids)}) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:p666_host_output_result) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (C {(p666_handle_remote_response)} {(DQ ('Cube execution'))}) ] ) ] ) (C {(p666_exit)} {(0)}) ] ) ] ) ] ) ] ) ] )