(command.CommandList children: [ (command.ShFunction name_tok: <p666_show_usage> name: p666_show_usage body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [{<p666_printf_error>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] spids: [104 117] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <HEREDOC>)} here_end_tok: <Id.Undefined_Tok ''> 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'> ] ) ) ] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [{<p666_printf_error>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] spids: [499 512] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name POSIXCUBE_SOURCED))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})] spids: [528 546] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_VERSION='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_VERSION='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'POSIXCUBE_VERSION='> name:POSIXCUBE_VERSION) op: assign_op.Equal rhs: {<0.1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_DEBUG='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_DEBUG='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'POSIXCUBE_DEBUG='> name:POSIXCUBE_DEBUG) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_RESET='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_RESET='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_RESET='> name: POSIXCUBE_COLOR_RESET ) op: assign_op.Equal rhs: {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[0m'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_RED='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_RED='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_RED='> name: POSIXCUBE_COLOR_RED ) op: assign_op.Equal rhs: {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[31m'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_GREEN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_GREEN='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_GREEN='> name: POSIXCUBE_COLOR_GREEN ) op: assign_op.Equal rhs: {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[32m'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_YELLOW='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_YELLOW='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_YELLOW='> name: POSIXCUBE_COLOR_YELLOW ) op: assign_op.Equal rhs: {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[33m'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_BLUE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_BLUE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_BLUE='> name: POSIXCUBE_COLOR_BLUE ) op: assign_op.Equal rhs: {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[34m'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_PURPLE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_PURPLE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_PURPLE='> name: POSIXCUBE_COLOR_PURPLE ) op: assign_op.Equal rhs: {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[35m'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_CYAN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_CYAN='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_CYAN='> name: POSIXCUBE_COLOR_CYAN ) op: assign_op.Equal rhs: {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[36m'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_WHITE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_WHITE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_COLOR_WHITE='> name: POSIXCUBE_COLOR_WHITE ) op: assign_op.Equal rhs: {(DQ <Id.Lit_BadBackslash '\\'> <'x1B[37m'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_NEWLINE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_NEWLINE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'POSIXCUBE_NEWLINE='> name:POSIXCUBE_NEWLINE) op: assign_op.Equal rhs: {(DQ <'\n'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_CUBE_NAME='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_CUBE_NAME='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_CUBE_NAME='> name: POSIXCUBE_CUBE_NAME ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_CUBE_NAME_WITH_PREFIX='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_CUBE_NAME_WITH_PREFIX='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_CUBE_NAME_WITH_PREFIX='> name: POSIXCUBE_CUBE_NAME_WITH_PREFIX ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_OS_UNKNOWN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_OS_UNKNOWN='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_OS_UNKNOWN='> name: POSIXCUBE_OS_UNKNOWN ) op: assign_op.Equal rhs: {<-1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_OS_LINUX='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_OS_LINUX='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'POSIXCUBE_OS_LINUX='> name:POSIXCUBE_OS_LINUX) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_OS_MAC_OSX='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_OS_MAC_OSX='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_OS_MAC_OSX='> name: POSIXCUBE_OS_MAC_OSX ) op: assign_op.Equal rhs: {<2>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_OS_WINDOWS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_OS_WINDOWS='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_OS_WINDOWS='> name: POSIXCUBE_OS_WINDOWS ) op: assign_op.Equal rhs: {<3>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_UNKNOWN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_UNKNOWN='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_UNKNOWN='> name: POSIXCUBE_OS_FLAVOR_UNKNOWN ) op: assign_op.Equal rhs: {<-1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_FEDORA='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_FEDORA='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_FEDORA='> name: POSIXCUBE_OS_FLAVOR_FEDORA ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_DEBIAN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_DEBIAN='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_DEBIAN='> name: POSIXCUBE_OS_FLAVOR_DEBIAN ) op: assign_op.Equal rhs: {<2>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_UBUNTU='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_UBUNTU='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_OS_FLAVOR_UBUNTU='> name: POSIXCUBE_OS_FLAVOR_UBUNTU ) op: assign_op.Equal rhs: {<3>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_SHELL_UNKNOWN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_SHELL_UNKNOWN='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_SHELL_UNKNOWN='> name: POSIXCUBE_SHELL_UNKNOWN ) op: assign_op.Equal rhs: {<-1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_SHELL_BASH='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_SHELL_BASH='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_SHELL_BASH='> name: POSIXCUBE_SHELL_BASH ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'POSIXCUBE_NODE_HOSTNAME='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'POSIXCUBE_NODE_HOSTNAME='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'POSIXCUBE_NODE_HOSTNAME='> name: POSIXCUBE_NODE_HOSTNAME ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <hostname> more_env: [] words: [{<hostname>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShFunction name_tok: <cube_echo> name: cube_echo body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'['> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'] ['> (${ Id.VSub_Name POSIXCUBE_COLOR_GREEN) (${ Id.VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] '> ) } ] redirects: [] do_fork: T ) ] spids: [710 728] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'['> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'] ['> (${ Id.VSub_Name POSIXCUBE_COLOR_GREEN) (${ Id.VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) (${ Id.VSub_Name POSIXCUBE_COLOR_CYAN) (${ Id.VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX) (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_line_number> more_env: [] words: [{<cube_line_number>} {(DQ <':'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] '> ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_printf> name: cube_printf body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'cube_printf_str='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_printf_str='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_printf_str='> name: cube_printf_str ) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'['> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'] ['> (${ Id.VSub_Name POSIXCUBE_COLOR_GREEN) (${ Id.VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] '> (${ Id.VSub_Name cube_printf_str) <Id.Lit_BadBackslash '\\'> <n> ) } {(DQ (${ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) ] spids: [856 874] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'['> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'] ['> (${ Id.VSub_Name POSIXCUBE_COLOR_GREEN) (${ Id.VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) (${ Id.VSub_Name POSIXCUBE_COLOR_CYAN) (${ Id.VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX) (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_line_number> more_env: [] words: [{<cube_line_number>} {(DQ <':'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] '> (${ Id.VSub_Name cube_printf_str) <Id.Lit_BadBackslash '\\'> <n> ) } {(DQ (${ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_error_echo> name: cube_error_echo body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'['> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'] ['> (${ Id.VSub_Name POSIXCUBE_COLOR_RED) (${ Id.VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] '> (${ Id.VSub_Name POSIXCUBE_COLOR_RED) <Error> (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <': '> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] spids: [996 1014] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'['> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'] ['> (${ Id.VSub_Name POSIXCUBE_COLOR_RED) (${ Id.VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ Id.VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX) (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_line_number> more_env: [] words: [{<cube_line_number>} {(DQ <':'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] '> (${ Id.VSub_Name POSIXCUBE_COLOR_RED) <Error> (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <': '> ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_At '@'))}] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_error_printf> name: cube_error_printf body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'cube_error_printf_str='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_error_printf_str='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_error_printf_str='> name: cube_error_printf_str ) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'['> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'] ['> (${ Id.VSub_Name POSIXCUBE_COLOR_RED) (${ Id.VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] '> (${ Id.VSub_Name POSIXCUBE_COLOR_RED) <Error> (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <': '> (${ Id.VSub_Name cube_error_printf_str) <Id.Lit_BadBackslash '\\'> <n> ) } {(DQ (${ Id.VSub_At '@'))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] spids: [1161 1179] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'['> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'] ['> (${ Id.VSub_Name POSIXCUBE_COLOR_RED) (${ Id.VSub_Name POSIXCUBE_NODE_HOSTNAME) (${ Id.VSub_Name POSIXCUBE_CUBE_NAME_WITH_PREFIX) (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_line_number> more_env: [] words: [{<cube_line_number>} {(DQ <':'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] '> (${ Id.VSub_Name POSIXCUBE_COLOR_RED) <Error> (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <': '> (${ Id.VSub_Name cube_error_printf_str) <Id.Lit_BadBackslash '\\'> <n> ) } {(DQ (${ Id.VSub_At '@'))} ] redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_throw> name: cube_throw body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_error_echo> more_env: [] words: [{<cube_error_echo>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_throw_pid='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_throw_pid='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cube_throw_pid='> name:cube_throw_pid) op: assign_op.Equal rhs: {($ Id.VSub_Dollar '$')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<caller>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {<'/proc/'> (${ Id.VSub_Name cube_throw_pid) <'/cmdline'>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_error_echo> more_env: [] words: [{<cube_error_echo>} {<Stack> <Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] spids: [1328 1349] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<caller>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'x='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'x='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'x='> name:x) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_error_caller='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_error_caller='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_error_caller='> name: cube_error_caller ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <caller> more_env: [] words: [{<caller>} {($ Id.VSub_DollarName x)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_error_caller_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_error_caller_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_error_caller_result='> name: cube_error_caller_result ) op: assign_op.Equal rhs: {(${ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name cube_error_caller_result)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_error_caller_result_lineno='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_error_caller_result_lineno='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_error_caller_result_lineno='> name: cube_error_caller_result_lineno ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ (${ Id.VSub_Name cube_error_caller))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{ print $1 }'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_error_caller_result_subroutine='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_error_caller_result_subroutine='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_error_caller_result_subroutine=' > name: cube_error_caller_result_subroutine ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ (${ Id.VSub_Name cube_error_caller))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{ print $2 }'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_error_caller_result_sourcefile='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_error_caller_result_sourcefile='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_error_caller_result_sourcefile=' > name: cube_error_caller_result_sourcefile ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ (${ Id.VSub_Name cube_error_caller))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [ {<awk>} { (SQ < '{ for(i=3;i<=NF;i++){ printf "%s ", $i }; printf "\\n" }' > ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/ $//'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <cube_error_printf> more_env: [] words: [ {<cube_error_printf>} { (DQ <' [func] %4s '> (${ Id.VSub_Name cube_error_caller_result_subroutine) <' '> (${ Id.VSub_Name cube_error_caller_result_sourcefile) ) } {(DQ (${ Id.VSub_Name cube_error_caller_result_lineno))} ] redirects: [] do_fork: T ) ] spids: [1400 1415] ) ] else_kw: <Id.KW_Else else> else_action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'x='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'x='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'x='> name:x) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {(${ Id.VSub_Name x)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] spids: [1363 1371] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {<'/proc/'> (${ Id.VSub_Name cube_throw_pid) <'/cmdline'>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_throw_cmdline='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_throw_cmdline='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_throw_cmdline='> name: cube_throw_cmdline ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [ {<cat>} {<'/proc/'> (${ Id.VSub_Name cube_throw_pid) <'/cmdline'> } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_throw_ppid='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_throw_ppid='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_throw_ppid='> name: cube_throw_ppid ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<PPid>} {<'/proc/'> (${ Id.VSub_Name cube_throw_pid) <'/status'> } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{ print $2; }'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <cube_error_printf> more_env: [] words: [ {<cube_error_printf>} {(DQ <' [pid] %5s '> (${ Id.VSub_Name cube_throw_cmdline))} {(${ Id.VSub_Name cube_throw_pid)} ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name cube_throw_pid))} {<Id.Lit_Equals '='>} {(DQ <1>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)] spids: [1612 1631] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_throw_pid='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_throw_pid='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_throw_pid='> name: cube_throw_pid ) op: assign_op.Equal rhs: {(${ Id.VSub_Name cube_throw_ppid)} ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] spids: [1538 1553] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_line_number> name: cube_line_number body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<caller>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'x='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'x='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'x='> name:x) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_api_caller_output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_api_caller_output='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_api_caller_output='> name: cube_api_caller_output ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <caller> more_env: [] words: [{<caller>} {($ Id.VSub_DollarName x)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_api_caller_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_api_caller_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_api_caller_result='> name: cube_api_caller_result ) op: assign_op.Equal rhs: {(${ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name cube_api_caller_result)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_api_caller_result_lineno='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_api_caller_result_lineno='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_api_caller_result_lineno='> name: cube_api_caller_result_lineno ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Name cube_api_caller_output) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{ print $1 }'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_api_caller_result_subroutine='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_api_caller_result_subroutine='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_api_caller_result_subroutine='> name: cube_api_caller_result_subroutine ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Name cube_api_caller_output) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{ print $2 }'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_api_caller_result_sourcefile='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_api_caller_result_sourcefile='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_api_caller_result_sourcefile='> name: cube_api_caller_result_sourcefile ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Name cube_api_caller_output) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [ {<awk>} { (SQ < '{ for(i=3;i<=NF;i++){ printf "%s ", $i }; printf "\\n" }' > ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/ $//'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_api_caller_result_sourcefile_basename=' > pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_api_caller_result_sourcefile_basename=' > lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_api_caller_result_sourcefile_basename=' > name: cube_api_caller_result_sourcefile_basename ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} { (DQ (${ Id.VSub_Name cube_api_caller_result_sourcefile ) ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (${ Id.VSub_Name cube_api_caller_result_sourcefile_basename ) ) } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <posixcube.sh>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(DQ <'%s'>)} {(DQ (${ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) ] spids: [1850 1869] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(DQ <'%s'>)} {(DQ (${ Id.VSub_Name cube_api_caller_result_lineno))} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] spids: [1827 1847] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [1729 1744] ) ] else_kw: <Id.KW_Else else> else_action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'x='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'x='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'x='> name:x) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {(${ Id.VSub_Name x)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] spids: [1692 1700] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_check_return> name: cube_check_return body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_check_return_val='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_check_return_val='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_check_return_val='> name: cube_check_return_val ) op: assign_op.Equal rhs: {(${ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name cube_check_return_val)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_check_return_info='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_check_return_info='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_check_return_info='> name: cube_check_return_info ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Star '*'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_check_return_info='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_check_return_info='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_check_return_info='> name: cube_check_return_info ) op: assign_op.Equal rhs: {(DQ <' ('> (${ Id.VSub_Star '*') <')'>)} ) ] redirects: [] ) ] spids: [1986 2005] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <cube_throw> more_env: [] words: [ {<cube_throw>} { (DQ <'Previous command failed with code '> (${ Id.VSub_Name cube_check_return_val) (${ Id.VSub_Name cube_check_return_info) ) } ] redirects: [] do_fork: T ) ] spids: [1963 1978] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {(${ Id.VSub_Name cube_check_return_val)} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_append_str> name: cube_append_str body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Number 2))}] redirects: [] do_fork: T ) ] spids: [2096 2114] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 3))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Number 1) <' '> (${ Id.VSub_Number 2))}] redirects: [] do_fork: T ) ] spids: [2129 2147] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ (${ Id.VSub_Number 1) (${ Id.VSub_Number 3) (${ Id.VSub_Number 2))} ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_command_exists> name: cube_command_exists body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <command> more_env: [] words: [{<command>} {<-v>} {(${ Id.VSub_Number 1)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_dir_exists> name: cube_dir_exists body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {<-d>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_file_exists> name: cube_file_exists body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_operating_system> name: cube_operating_system body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <uname> more_env: [] words: [{<uname>} {<-s>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Linux> pattern: (pat.Words words:[{<Linux>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(${ Id.VSub_Name POSIXCUBE_OS_LINUX)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Darwin> pattern: (pat.Words words:[{<Darwin>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(${ Id.VSub_Name POSIXCUBE_OS_MAC_OSX)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <CYGWIN> pattern: (pat.Words words: [ {<CYGWIN> <Id.Lit_Star '*'>} {<MINGW32> <Id.Lit_Star '*'>} {<MSYS> <Id.Lit_Star '*'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(${ Id.VSub_Name POSIXCUBE_OS_WINDOWS)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(${ Id.VSub_Name POSIXCUBE_OS_UNKNOWN)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_operating_system_has_flavor> name: cube_operating_system_has_flavor body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ (${ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Left_DollarBrace '${'> pattern: (pat.Words words:[{(${ Id.VSub_Name POSIXCUBE_OS_FLAVOR_FEDORA)}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_file_exists> more_env: [] words: [{<cube_file_exists>} {(DQ <'/etc/fedora-release'>)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [2516 2525] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DollarBrace '${'> pattern: (pat.Words words:[{(${ Id.VSub_Name POSIXCUBE_OS_FLAVOR_UBUNTU)}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_file_exists> more_env: [] words: [{<cube_file_exists>} {(DQ <'/etc/lsb-release'>)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [2545 2554] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DollarBrace '${'> pattern: (pat.Words words:[{(${ Id.VSub_Name POSIXCUBE_OS_FLAVOR_DEBIAN)}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <cube_file_contains> more_env: [] words: [ {<cube_file_contains>} {<'/etc/os-release'>} { (DQ <'NAME='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <Debian> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_file_exists> more_env: [] words: [{<cube_file_exists>} {(DQ <'/etc/lsb-release'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [2574 2595] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [{<cube_throw>} {(DQ <'Unknown flavor '> (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_shell> name: cube_shell body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName BASH))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(${ Id.VSub_Name POSIXCUBE_SHELL_BASH)}] redirects: [] do_fork: T ) ] spids: [2662 2679] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(${ Id.VSub_Name POSIXCUBE_SHELL_UNKNOWN)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_check_numargs> name: cube_check_numargs body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'cube_check_numargs_expected='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_check_numargs_expected='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_check_numargs_expected='> name: cube_check_numargs_expected ) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Pound '#')} {<-lt>} {(${ Id.VSub_Name cube_check_numargs_expected)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_throw> more_env: [] words: [ {<cube_throw>} { (DQ <'Expected '> (${ Id.VSub_Name cube_check_numargs_expected) <' arguments, received '> (${ Id.VSub_Pound '#') <.> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_service> name: cube_service body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<systemctl>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <daemon-reload>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <systemctl> more_env: [] words: [{<systemctl>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [2833 2852] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Simple blame_tok: <systemctl> more_env: [] words: [{<systemctl>} {($ Id.VSub_Number 1)} {($ Id.VSub_Number 2)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [2822 2830] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<service>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 1))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <daemon-reload>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <service> more_env: [] words: [{<service>} {($ Id.VSub_Number 2)} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [2892 2912] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [2881 2889] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [{<cube_throw>} {(DQ <'Could not find service program'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ (${ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <stop> pattern: (pat.Words words:[{<stop>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_service_verb='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_service_verb='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_service_verb='> name: cube_service_verb ) op: assign_op.Equal rhs: {(DQ <stopped>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <enable> pattern: (pat.Words words:[{<enable>} {<disable>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_service_verb='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_service_verb='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_service_verb='> name: cube_service_verb ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1) <d>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_service_verb='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_service_verb='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_service_verb='> name: cube_service_verb ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1) <ed>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <cube_echo> more_env: [] words: [ {<cube_echo>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(${ Id.VSub_Name cube_service_verb)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [{<cut>} {<-c1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <tr> more_env: [] words: [ {<tr>} {<Id.Lit_LBracket '['> <a-z> <Id.Lit_RBracket ']'>} {<Id.Lit_LBracket '['> <A-Z> <Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(${ Id.VSub_Name cube_service_verb)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [{<cut>} {<-c2->}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) <' '> ($ Id.VSub_Number 2) <' service'> ) } ] redirects: [] do_fork: T ) ] spids: [2942 2961] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <cube_echo> more_env: [] words: [{<cube_echo>} {(DQ <'Executed '> ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_service_exists> name: cube_service_exists body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<systemctl>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_service_exists_output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_service_exists_output='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_service_exists_output='> name: cube_service_exists_output ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <systemctl> more_env: [] words: [{<systemctl>} {<status>} {(${ Id.VSub_Number 1)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name cube_service_exists_output))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-l>} {<loaded>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_QMark '?')} ) ] spids: [3127 3135] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [{<cube_throw>} {(DQ <'Not implemented'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_package> name: cube_package body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<dnf>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_echo> more_env: [] words: [{<cube_echo>} {(DQ <'Executing dnf -y '> (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <dnf> more_env: [] words: [{<dnf>} {<-y>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [3242 3250] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<yum>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_echo> more_env: [] words: [{<cube_echo>} {(DQ <'Executing yum -y '> (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <yum> more_env: [] words: [{<yum>} {<-y>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [3278 3286] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<apt-get>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_echo> more_env: [] words: [{<cube_echo>} {(DQ <'Executing apt-get -y '> (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <apt-get> more_env: [ (EnvPair left: <Id.Lit_VarLike 'DEBIAN_FRONTEND='> name: DEBIAN_FRONTEND val: {<noninteractive>} ) ] words: [{<apt-get>} {<-y>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [3314 3322] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [ {<cube_throw>} {(DQ <'cube_package has not implemented your operating system yet'>)} ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_current_script_name> name: cube_current_script_name body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <basename> more_env: [] words: [{<basename>} {(DQ ($ Id.VSub_Number 0))}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_current_script_abs_path> name: cube_current_script_abs_path body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_current_script_abs_path_dirname='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_current_script_abs_path_dirname='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_current_script_abs_path_dirname='> name: cube_current_script_abs_path_dirname ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <cd> more_env: [] words: [ {<cd>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <dirname> more_env: [] words: [{<dirname>} {(DQ ($ Id.VSub_Number 0))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <pwd> more_env: [] words: [{<pwd>} {<-P>}] redirects: [] do_fork: T ) ] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Name cube_current_script_abs_path_dirname) <'/'> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_current_script_name> more_env: [] words: [{<cube_current_script_name>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_file_size> name: cube_file_size body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_file_exists> more_env: [] words: [{<cube_file_exists>} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-c>}] redirects: [ (Redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ (${ Id.VSub_Number 1))} ) ] do_fork: T ) ] spids: [3503 3515] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [{<cube_throw>} {(DQ <'Could not find or read file '> (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_expand_parameters> name: cube_expand_parameters body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_expand_parameters_is_bash='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_expand_parameters_is_bash='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_expand_parameters_is_bash='> name: cube_expand_parameters_is_bash ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_shell> more_env: [] words: [{<cube_shell>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } {<-eq>} {(${ Id.VSub_Name POSIXCUBE_SHELL_BASH)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_expand_parameters_is_bash='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_expand_parameters_is_bash='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_expand_parameters_is_bash='> name: cube_expand_parameters_is_bash ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) ] spids: [3581 3598] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <read> more_env: [(EnvPair left:<Id.Lit_VarLike 'IFS='> name:IFS val:{(SQ )})] words: [{<read>} {<-r>} {<cube_expand_parameters_line>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ (${ Id.VSub_Name cube_expand_parameters_line))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_expand_parameters_line_escaped='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_expand_parameters_line_escaped='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_expand_parameters_line_escaped='> name: cube_expand_parameters_line_escaped ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {<Id.Lit_Other '%'> <s>} {(DQ (${ Id.VSub_Name cube_expand_parameters_line))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <tr> more_env: [] words: [{<tr>} {(SQ <'`([$\\\\"'>)} {(SQ <'\\1\\2\\3\\4\\5\\6'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName cube_expand_parameters_is_bash)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_expand_parameters_line_escaped='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_expand_parameters_line_escaped='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_expand_parameters_line_escaped='> name: cube_expand_parameters_line_escaped ) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name cube_expand_parameters_line_escaped> var_name: cube_expand_parameters_line_escaped suffix_op: (suffix_op.PatSub pat: { (SingleQuoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_Octal3 '\\4'>] right: <Id.Right_SingleQuote '\''> ) <'{'> } replace: { (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'{'> } replace_mode: Id.Lit_Slash slash_tok: <Id.VOp2_Slash _> ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) ] spids: [3693 3706] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_expand_parameters_line_escaped='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_expand_parameters_line_escaped='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_expand_parameters_line_escaped='> name: cube_expand_parameters_line_escaped ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {<Id.Lit_Other '%'> <s>} { (DQ (${ Id.VSub_Name cube_expand_parameters_line_escaped ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/\\([^\\x05]\\)\\x04{/\\1${/g'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/^\\x04{/${/g'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_expand_parameters_output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_expand_parameters_output='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_expand_parameters_output='> name: cube_expand_parameters_output ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ <'printf \'%s'> <Id.Lit_BadBackslash '\\'> <'n\' '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (${ Id.VSub_Name cube_expand_parameters_line_escaped) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [ {<cube_check_return>} {(DQ (${ Id.VSub_Name cube_expand_parameters_line_escaped))} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name cube_expand_parameters_output))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <tr> more_env: [] words: [{<tr>} {(SQ <'\\1\\2\\3\\4\\5\\6'>)} {(SQ <'`([$\\\\"'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_read_heredoc> name: cube_read_heredoc body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_read_heredoc_first='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_read_heredoc_first='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_read_heredoc_first='> name: cube_read_heredoc_first ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_read_heredoc_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_read_heredoc_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_read_heredoc_result='> name: cube_read_heredoc_result ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <read> more_env: [(EnvPair left:<Id.Lit_VarLike 'IFS='> name:IFS val:{(SQ <'\\n'>)})] words: [{<read>} {<-r>} {<cube_read_heredoc_line>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name cube_read_heredoc_first)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_read_heredoc_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_read_heredoc_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_read_heredoc_result='> name: cube_read_heredoc_result ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name cube_read_heredoc_line))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_read_heredoc_first='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_read_heredoc_first='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_read_heredoc_first='> name: cube_read_heredoc_first ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) ] spids: [3872 3887] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_read_heredoc_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_read_heredoc_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_read_heredoc_result='> name: cube_read_heredoc_result ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name cube_read_heredoc_result) (${ Id.VSub_Name POSIXCUBE_NEWLINE) (${ Id.VSub_Name cube_read_heredoc_line) ) } ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_set_file_contents> name: cube_set_file_contents body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<2>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_target_file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_target_file='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_target_file='> name: cube_set_file_contents_target_file ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_input_file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_input_file='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_input_file='> name: cube_set_file_contents_input_file ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_debug='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_debug='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_debug='> name: cube_set_file_contents_debug ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> name: cube_set_file_contents_needs_replace ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_needs_remove='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_needs_remove='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_needs_remove='> name: cube_set_file_contents_input_file_needs_remove ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <cube_file_exists> more_env: [] words: [ {<cube_file_exists>} {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file))} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [ {<cube_throw>} { (DQ <'Could not find or read input '> (${ Id.VSub_Name cube_set_file_contents_input_file) ) } ] redirects: [] do_fork: T ) ] spids: [4017 4031] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <cube_ensure_directory> more_env: [] words: [ {<cube_ensure_directory>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <dirname> more_env: [] words: [ {<dirname>} {(DQ (${ Id.VSub_Name cube_set_file_contents_target_file))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_is_template='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_is_template='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_is_template='> name: cube_set_file_contents_input_file_is_template ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file))} {<Id.Lit_Colon ':'>} {(SQ <'.*\\.template$'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name cube_set_file_contents_input_file_is_template)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_original='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_original='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_original='> name: cube_set_file_contents_input_file_original ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_input_file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_input_file='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_input_file='> name: cube_set_file_contents_input_file ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file) <.tmp>)} ) ] redirects: [] ) (command.Simple blame_tok: <cube_echo> more_env: [] words: [ {<cube_echo>} { (DQ <'Expanding parameters of '> (${ Id.VSub_Name cube_set_file_contents_input_file_original) ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <cube_expand_parameters> more_env: [] words: [{<cube_expand_parameters>}] redirects: [ (Redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file_original))} ) (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file))} ) ] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <cube_echo> more_env: [] words: [{<cube_echo>} {(DQ <'Expansion complete'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_needs_remove='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_needs_remove='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_needs_remove='> name: cube_set_file_contents_input_file_needs_remove ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] spids: [4084 4099] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_file_exists> more_env: [] words: [ {<cube_file_exists>} {(DQ (${ Id.VSub_Name cube_set_file_contents_target_file))} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_target_file_size='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_target_file_size='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_target_file_size='> name: cube_set_file_contents_target_file_size ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_file_size> more_env: [] words: [ {<cube_file_size>} {(DQ (${ Id.VSub_Name cube_set_file_contents_target_file))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_size='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_size='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_size='> name: cube_set_file_contents_input_file_size ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_file_size> more_env: [] words: [ {<cube_file_size>} {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name POSIXCUBE_DEBUG)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_echo> more_env: [] words: [ {<cube_echo>} { (DQ <'Target file '> (${ Id.VSub_Name cube_set_file_contents_target_file) <' exists. Target size: '> (${ Id.VSub_Name cube_set_file_contents_target_file_size) <', source size: '> (${ Id.VSub_Name cube_set_file_contents_input_file_size) ) } ] redirects: [] do_fork: T ) ] spids: [4260 4275] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name cube_set_file_contents_target_file_size)} {<-eq>} {(${ Id.VSub_Name cube_set_file_contents_input_file_size)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_target_file_cksum='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_target_file_cksum='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_target_file_cksum='> name: cube_set_file_contents_target_file_cksum ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <cksum> more_env: [] words: [ {<cksum>} { (DQ (${ Id.VSub_Name cube_set_file_contents_target_file ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{print $1}'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_cksum='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_cksum='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_input_file_cksum='> name: cube_set_file_contents_input_file_cksum ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <cksum> more_env: [] words: [ {<cksum>} { (DQ (${ Id.VSub_Name cube_set_file_contents_input_file ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{print $1}'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name POSIXCUBE_DEBUG)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_echo> more_env: [] words: [ {<cube_echo>} { (DQ <'Target cksum: '> (${ Id.VSub_Name cube_set_file_contents_target_file_cksum) <', source cksum: '> (${ Id.VSub_Name cube_set_file_contents_input_file_cksum) ) } ] redirects: [] do_fork: T ) ] spids: [4367 4382] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (${ Id.VSub_Name cube_set_file_contents_target_file_cksum ) ) } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} { (DQ (${ Id.VSub_Name cube_set_file_contents_input_file_cksum ) ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace=' > name: cube_set_file_contents_needs_replace ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] spids: [4404 4426] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [4301 4318] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> name: cube_set_file_contents_needs_replace ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [4213 4225] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_needs_replace='> name: cube_set_file_contents_needs_replace ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name cube_set_file_contents_needs_replace)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_echo> more_env: [] words: [ {<cube_echo>} { (DQ <'Updating file contents of '> (${ Id.VSub_Name cube_set_file_contents_target_file) <' with '> (${ Id.VSub_Name cube_set_file_contents_debug) ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <cp> more_env: [] words: [ {<cp>} {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file))} {(DQ (${ Id.VSub_Name cube_set_file_contents_target_file))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (${ Id.VSub_Name cube_set_file_contents_input_file_needs_remove ) } {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {<-f>} {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [4509 4525] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [4457 4473] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (${ Id.VSub_Name cube_set_file_contents_input_file_needs_remove) } {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {<-f>} {(DQ (${ Id.VSub_Name cube_set_file_contents_input_file))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [4554 4570] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_random_number> name: cube_random_number body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ )}] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [ {<awk>} {(DQ <'{ srand(); print int('> (${ Id.VSub_Number 1) <' * rand()) + 1; }'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_tmpdir> name: cube_tmpdir body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'/tmp/'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_set_file_contents_string> name: cube_set_file_contents_string body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<2>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_target_file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_target_file='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_target_file='> name: cube_set_file_contents_target_file ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_tmp='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_tmp='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_tmp='> name: cube_set_file_contents_tmp ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_tmpdir> more_env: [] words: [{<cube_tmpdir>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'/tmpcontents_'> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_random_number> more_env: [] words: [{<cube_random_number>} {<10000>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <.template> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_At '@'))}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ (${ Id.VSub_Name cube_set_file_contents_tmp))} ) ] do_fork: T ) (command.Simple blame_tok: <cube_set_file_contents> more_env: [] words: [ {<cube_set_file_contents>} {(DQ (${ Id.VSub_Name cube_set_file_contents_target_file))} {(DQ (${ Id.VSub_Name cube_set_file_contents_tmp))} {(DQ <'from string'>)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_set_file_contents_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_set_file_contents_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_set_file_contents_result='> name: cube_set_file_contents_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {(DQ (${ Id.VSub_Name cube_set_file_contents_tmp))}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {(${ Id.VSub_Name cube_set_file_contents_result)} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_readlink> name: cube_readlink body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_readlink_target='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_readlink_target='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_readlink_target='> name: cube_readlink_target ) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_readlink_path='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_readlink_path='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_readlink_path='> name: cube_readlink_path ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr children: [ (command.Simple blame_tok: <cd> more_env: [] words: [ {<cd>} {<-P>} {<-->} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <dirname> more_env: [] words: [ {<dirname>} {<-->} {(DQ (${ Id.VSub_Name cube_readlink_target))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <pwd> more_env: [] words: [{<pwd>} {<-P>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_readlink_path='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_readlink_path='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_readlink_path='> name: cube_readlink_path ) op: assign_op.Equal rhs: {(${ Id.VSub_Name cube_readlink_path) <'/'> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [{<basename>} {<-->} {(DQ (${ Id.VSub_Name cube_readlink_target))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-h>} {(DQ (${ Id.VSub_Name cube_readlink_path))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_readlink_dir='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_readlink_dir='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_readlink_dir='> name: cube_readlink_dir ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <dirname> more_env: [] words: [ {<dirname>} {<-->} {(DQ (${ Id.VSub_Name cube_readlink_path))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_readlink_sym='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_readlink_sym='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_readlink_sym='> name: cube_readlink_sym ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <readlink> more_env: [] words: [{<readlink>} {(DQ (${ Id.VSub_Name cube_readlink_path))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_readlink_path='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_readlink_path='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_readlink_path='> name: cube_readlink_path ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr children: [ (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {(DQ (${ Id.VSub_Name cube_readlink_dir))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cd> more_env: [] words: [ {<cd>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <dirname> more_env: [] words: [ {<dirname>} {<-->} {(DQ (${ Id.VSub_Name cube_readlink_sym))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <pwd> more_env: [] words: [{<pwd>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) right: <Id.Eof_RParen _> ) <'/'> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {<-->} {(DQ (${ Id.VSub_Name cube_readlink_sym))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(${ Id.VSub_Name cube_readlink_path)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_total_memory> name: cube_total_memory body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ (${ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <kb> pattern: (pat.Words words:[{<kb>} {<KB>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_total_memory_divisor='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_total_memory_divisor='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_total_memory_divisor='> name: cube_total_memory_divisor ) op: assign_op.Equal rhs: {<1024>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <mb> pattern: (pat.Words words:[{<mb>} {<MB>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_total_memory_divisor='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_total_memory_divisor='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_total_memory_divisor='> name: cube_total_memory_divisor ) op: assign_op.Equal rhs: {<1048576>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <gb> pattern: (pat.Words words:[{<gb>} {<GB>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_total_memory_divisor='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_total_memory_divisor='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_total_memory_divisor='> name: cube_total_memory_divisor ) op: assign_op.Equal rhs: {<1073741824>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_total_memory_divisor='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_total_memory_divisor='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_total_memory_divisor='> name: cube_total_memory_divisor ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.Binary op_id: Id.Arith_Star left: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {(DQ <'^MemTotal:'>)} {<'/proc/meminfo'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{print $2}'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } right: {<Id.Lit_Digits 1024>} ) right: {(${ Id.VSub_Name cube_total_memory_divisor)} ) right: <Id.Right_DollarDParen _> ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_ensure_directory> name: cube_ensure_directory body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_ensure_directory_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_ensure_directory_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_ensure_directory_result='> name: cube_ensure_directory_result ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <cube_dir_exists> more_env: [] words: [{<cube_dir_exists>} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_ensure_directory_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_ensure_directory_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_ensure_directory_result='> name: cube_ensure_directory_result ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.Simple blame_tok: <cube_echo> more_env: [] words: [{<cube_echo>} {(DQ <'Created directory '> (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] spids: [5230 5243] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <chmod> more_env: [] words: [{<chmod>} {(${ Id.VSub_Number 2)} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [5278 5297] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 3))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <chown> more_env: [] words: [{<chown>} {(${ Id.VSub_Number 3)} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [5320 5339] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 4))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <chgrp> more_env: [] words: [{<chgrp>} {(${ Id.VSub_Number 4)} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [5362 5381] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {(${ Id.VSub_Name cube_ensure_directory_result)} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_ensure_file> name: cube_ensure_file body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_ensure_file_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_ensure_file_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_ensure_file_result='> name: cube_ensure_file_result ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <cube_file_exists> more_env: [] words: [{<cube_file_exists>} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_ensure_directory> more_env: [] words: [ {<cube_ensure_directory>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <dirname> more_env: [] words: [{<dirname>} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {($ Id.VSub_Number 2)} {($ Id.VSub_Number 3)} {($ Id.VSub_Number 4)} ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <touch> more_env: [] words: [{<touch>} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_ensure_file_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_ensure_file_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_ensure_file_result='> name: cube_ensure_file_result ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.Simple blame_tok: <cube_echo> more_env: [] words: [{<cube_echo>} {(DQ <'Created file '> (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] spids: [5472 5485] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <chmod> more_env: [] words: [{<chmod>} {(${ Id.VSub_Number 2)} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [5543 5562] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 3))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <chown> more_env: [] words: [{<chown>} {(${ Id.VSub_Number 3)} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [5585 5604] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 4))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <chgrp> more_env: [] words: [{<chgrp>} {(${ Id.VSub_Number 4)} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [5627 5646] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {(${ Id.VSub_Name cube_ensure_file_result)} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_pushd> name: cube_pushd body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<pushd>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <pushd> more_env: [] words: [{<pushd>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [5720 5728] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [{<cube_throw>} {(DQ <'TODO: Not implemented'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_popd> name: cube_popd body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<popd>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <popd> more_env: [] words: [{<popd>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [5781 5789] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [{<cube_throw>} {(DQ <'TODO: Not implemented'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_has_role> name: cube_has_role body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [cube_has_role_name] iterable: (for_iter.Words words:[{(${ Id.VSub_Name cubevar_api_roles)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name cube_has_role_name))} {<Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [5875 5896] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_file_contains> name: cube_file_contains body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<2>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_file_contains_grep_output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_file_contains_grep_output='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_file_contains_grep_output='> name: cube_file_contains_grep_output ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<-l>} {(DQ (${ Id.VSub_Number 2))} {(DQ (${ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_file_contains_grep_results='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_file_contains_grep_results='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_file_contains_grep_results='> name: cube_file_contains_grep_results ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name cube_file_contains_grep_results)} {<-eq>} {<2>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [{<cube_throw>} {(DQ (${ Id.VSub_Name cube_file_contains_grep_output))}] redirects: [] do_fork: T ) ] spids: [5993 6008] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {(${ Id.VSub_Name cube_file_contains_grep_results)} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_stdin_contains> name: cube_stdin_contains body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_stdin_contains_output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_stdin_contains_output='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_stdin_contains_output='> name: cube_stdin_contains_output ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-l>} {(DQ (${ Id.VSub_Number 1))} {<->}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_stdin_contains_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_stdin_contains_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_stdin_contains_result='> name: cube_stdin_contains_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name cube_stdin_contains_result)} {<-eq>} {<2>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [{<cube_throw>} {(DQ (${ Id.VSub_Name cube_stdin_contains_output))}] redirects: [] do_fork: T ) ] spids: [6094 6109] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {(${ Id.VSub_Name cube_stdin_contains_result)} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_interface_ipv4_address> name: cube_interface_ipv4_address body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Pipeline children: [ (command.Simple blame_tok: <ip> more_env: [] words: [{<ip>} {<-4>} {<-o>} {<address>} {<show>} {<dev>} {(${ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <head> more_env: [] words: [{<head>} {<-1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{print $4}'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/\\/.*$//g'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _> <Id.Op_Pipe _>] ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_interface_ipv6_address> name: cube_interface_ipv6_address body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Pipeline children: [ (command.Simple blame_tok: <ip> more_env: [] words: [{<ip>} {<-6>} {<-o>} {<address>} {<show>} {<dev>} {(${ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <head> more_env: [] words: [{<head>} {<-1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [{<awk>} {(SQ <'{print $4}'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/\\/.*$//g'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _> <Id.Op_Pipe _>] ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_prompt> name: cube_prompt body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ (${ Id.VSub_Number 1) <' (y/N)? '>)}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<cube_prompt_response>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ (${ Id.VSub_Name cube_prompt_response))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_LBracket '['> pattern: (pat.Words words: [ {<Id.Lit_LBracket '['> <Yy> <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words: [ {(DQ )} {<Id.Lit_LBracket '['> <Nn> <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Please answer yes or no.'>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_hostname> name: cube_hostname body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <uname> more_env: [] words: [{<uname>} {<-n>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [6467 6485] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Pipeline children: [ (command.Simple blame_tok: <uname> more_env: [] words: [{<uname>} {<-n>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/\\..*$//g'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_user_exists> name: cube_user_exists body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <id> more_env: [] words: [{<id>} {<-u>} {(DQ (${ Id.VSub_Number 1))}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_QMark '?')} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_create_user> name: cube_create_user body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <useradd> more_env: [] words: [{<useradd>} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <usermod> more_env: [] words: [ {<usermod>} {<-s>} {(DQ (${ Id.VSub_Number 2))} {(DQ (${ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [6647 6666] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_group_exists> name: cube_group_exists body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_file_contains> more_env: [] words: [{<cube_file_contains>} {<'/etc/group'>} {(DQ <'^'> (${ Id.VSub_Number 1) <':'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_create_group> name: cube_create_group body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <groupadd> more_env: [] words: [{<groupadd>} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_group_contains_user> name: cube_group_contains_user body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<2>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [cube_group_contains_user] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <groups> more_env: [] words: [{<groups>} {(DQ (${ Id.VSub_Number 2))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(DQ <'s/'> (${ Id.VSub_Number 2) <' : //g'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name cube_group_contains_user))} {<Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [6881 6902] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_add_group_user> name: cube_add_group_user body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<2>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 3))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <usermod> more_env: [] words: [ {<usermod>} {<-a>} {<-G>} {(DQ (${ Id.VSub_Number 1))} {(DQ (${ Id.VSub_Number 2))} ] redirects: [] do_fork: T ) ] spids: [6973 6991] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <usermod> more_env: [] words: [{<usermod>} {<-g>} {(DQ (${ Id.VSub_Number 1))} {(DQ (${ Id.VSub_Number 2))}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cube_include> name: cube_include body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cube_check_numargs> more_env: [] words: [{<cube_check_numargs>} {<1>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cube_include_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_include_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_include_name='> name: cube_include_name ) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 1> var_name: 1 suffix_op: (suffix_op.Unary op: <Id.VOp1_DPercent '%%'> arg_word: {<Id.Lit_Slash '/'>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {(DQ <'../'> (${ Id.VSub_Name cube_include_name))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cube_include_name_base='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cube_include_name_base='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cube_include_name_base='> name: cube_include_name_base ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name cube_include_name))} {<.sh>} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} { (DQ <'../'> (${ Id.VSub_Name cube_include_name) <'/'> (${ Id.VSub_Name cube_include_name_base) <.sh> ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_echo> more_env: [] words: [ {<cube_echo>} {(DQ <'Including '> (${ Id.VSub_Name cube_include_name) <' cube...'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <.> more_env: [] words: [ {<.>} { (DQ <'../'> (${ Id.VSub_Name cube_include_name) <'/'> (${ Id.VSub_Name cube_include_name_base) <.sh> ) } ] redirects: [] do_fork: T ) ] spids: [7122 7143] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [ {<cube_throw>} { (DQ <'Cannot read '> (${ Id.VSub_Name cube_include_name) <'/'> (${ Id.VSub_Name cube_include_name_base) <.sh> ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [7089 7105] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ <'../'> (${ Id.VSub_Name cube_include_name))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_echo> more_env: [] words: [ {<cube_echo>} {(DQ <'Including '> (${ Id.VSub_Name cube_include_name) <' cube...'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {(DQ <'../'> (${ Id.VSub_Name cube_include_name))}] redirects: [] do_fork: T ) ] spids: [7193 7209] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Name cube_include_name) <.sh>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cube_echo> more_env: [] words: [ {<cube_echo>} {(DQ <'Including '> (${ Id.VSub_Name cube_include_name) <' cube...'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {(DQ <'../'> (${ Id.VSub_Name cube_include_name) <.sh>)}] redirects: [] do_fork: T ) ] spids: [7233 7249] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <cube_throw> more_env: [] words: [ {<cube_throw>} { (DQ <'Cube '> (${ Id.VSub_Name cube_include_name) <' not found (did you upload it with -i '> (${ Id.VSub_Name cube_include_name) <' ?).'> ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'cubevar_api_post_restart='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cubevar_api_post_restart='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'cubevar_api_post_restart='> name: cubevar_api_post_restart ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cubevar_api_roles='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cubevar_api_roles='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cubevar_api_roles='> name:cubevar_api_roles) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name POSIXCUBE_APIS_ONLY))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_debug='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_debug='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_debug='> name:p666_debug) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_quiet='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_quiet='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_quiet='> name:p666_quiet) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_skip_init='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_skip_init='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_skip_init='> name:p666_skip_init) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_keep_exec='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_keep_exec='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_keep_exec='> name:p666_keep_exec) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_skip_host_errors='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_skip_host_errors='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_skip_host_errors='> name: p666_skip_host_errors ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_hosts='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_hosts='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_hosts='> name:p666_hosts) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_cubes='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cubes='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_cubes='> name:p666_cubes) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_include_cubes='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_include_cubes='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_include_cubes='> name: p666_include_cubes ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts='> name: p666_envar_scripts ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts_password='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts_password='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts_password='> name: p666_envar_scripts_password ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_user='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_user='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_user='> name:p666_user) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name USER))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_cubedir='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cubedir='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_cubedir='> name:p666_cubedir) op: assign_op.Equal rhs: {(DQ <'~/posixcubes/'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_roles='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_roles='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_roles='> name:p666_roles) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_options='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_options='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_options='> name:p666_options) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_specfile='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_specfile='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_specfile='> name:p666_specfile) op: assign_op.Equal rhs: {(DQ <'./cubespecs.ini'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_parallel='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_parallel='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_parallel='> name:p666_parallel) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_async_cubes='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_async_cubes='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_async_cubes='> name: p666_async_cubes ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_default_envars='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_default_envars='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_default_envars='> name: p666_default_envars ) op: assign_op.Equal rhs: {(DQ <'envars*sh envars*sh.enc'>)} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_shell> more_env: [] words: [{<cube_shell>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } {<-eq>} {(${ Id.VSub_Name POSIXCUBE_SHELL_BASH)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_parallel='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_parallel='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_parallel='> name: p666_parallel ) op: assign_op.Equal rhs: {<64>} ) ] redirects: [] ) ] spids: [7445 7462] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShFunction name_tok: <p666_show_version> name: p666_show_version body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'posixcube.sh version '> (${ Id.VSub_Name POSIXCUBE_VERSION) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <p666_printf> name: p666_printf body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_printf_str='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_printf_str='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_printf_str='> name: p666_printf_str ) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <'['> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'] '> (${ Id.VSub_Name p666_printf_str) ) } {(DQ (${ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <p666_printf_error> name: p666_printf_error body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_printf_str='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_printf_str='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_printf_str='> name: p666_printf_str ) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} { (DQ <Id.Lit_BadBackslash '\\'> <'n['> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'] '> (${ Id.VSub_Name POSIXCUBE_COLOR_RED) <Error> (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <': '> (${ Id.VSub_Name p666_printf_str) <Id.Lit_BadBackslash '\\'> <n> <Id.Lit_BadBackslash '\\'> <n> ) } {(DQ (${ Id.VSub_At '@'))} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <p666_exit> name: p666_exit body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_envar_script] iterable: (for_iter.Words words:[{(${ Id.VSub_Name p666_envar_scripts)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_script_enc_matches='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_script_enc_matches='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_script_enc_matches='> name: p666_envar_script_enc_matches ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(${ Id.VSub_Name p666_envar_script)} {<Id.Lit_Colon ':'>} {(SQ <'.*\\.dec$'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_envar_script_enc_matches)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {(DQ (${ Id.VSub_Name p666_envar_script))}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) ] spids: [7626 7641] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_keep_exec)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ (${ Id.VSub_Name p666_script))}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {(${ Id.VSub_Number 1)} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <p666_install> name: p666_install body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_func_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_func_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_func_result='> name: p666_func_result ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {(DQ <'/etc/bash_completion.d/'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_autocomplete_file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_autocomplete_file='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_autocomplete_file='> name: p666_autocomplete_file ) op: assign_op.Equal rhs: {<'/etc/bash_completion.d/posixcube_completion.sh'>} ) ] redirects: [] ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <HEREDOC>)} here_end_tok: <Id.Undefined_Tok ''> 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' > ] ) ) ] do_fork: T ) (command.Simple blame_tok: <tee> more_env: [] words: [{<tee>} {(${ Id.VSub_Name p666_autocomplete_file)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_func_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_func_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_func_result='> name: p666_func_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_func_result)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <chmod> more_env: [] words: [ {<chmod>} {<Id.Lit_Other '+'> <x>} {(${ Id.VSub_Name p666_autocomplete_file)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_func_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_func_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_func_result='> name: p666_func_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_func_result)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {(${ Id.VSub_Name p666_autocomplete_file)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_func_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_func_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_func_result='> name: p666_func_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_func_result)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ < 'Installed Bash programmable completion script into ' > (${ Id.VSub_Name p666_autocomplete_file) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] spids: [7868 7883] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Could not execute '> (${ Id.VSub_Name p666_autocomplete_file) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [7839 7854] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Could not chmod +x '> (${ Id.VSub_Name p666_autocomplete_file) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [7807 7822] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Could not create '> (${ Id.VSub_Name p666_autocomplete_file) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'You may need to try with sudo. For example:'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <' sudo '> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_current_script_abs_path> more_env: [] words: [{<cube_current_script_abs_path>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <' -b && . '> (${ Id.VSub_Name p666_autocomplete_file) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ < 'You only need to source the command the first time. Subsequent shells will automatically source it.' > <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [7723 7736] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ < 'No directory /etc/bash_completion.d/ found, skipping Bash programmable completion installation.' > <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {(${ Id.VSub_Name p666_func_result)} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_all_hosts='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_all_hosts='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_all_hosts='> name:p666_all_hosts) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShFunction name_tok: <p666_process_hostname> name: p666_process_hostname body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_hostname_wildcard='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_hostname_wildcard='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_hostname_wildcard='> name: p666_hostname_wildcard ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_Colon ':'>} {(SQ <'.*\\*.*'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_hostname_wildcard)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_all_hosts))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_all_hosts='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_all_hosts='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_all_hosts='> name: p666_all_hosts ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [c] iterable: (for_iter.Words words: [ {<'/etc/ssh_config'>} {<'/etc/ssh/ssh_config'>} { (word_part.TildeSub token: <Id.Lit_TildeLike '~'> ) <'/.ssh/config'> } ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {($ Id.VSub_DollarName c)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} {<-n>} {<-e>} { (SQ < 's/^Host[[:space:]]//p' > ) } {<-e>} { (SQ < 's/^[[:space:]]*HostName[[:space:]]//p' > ) } {($ Id.VSub_DollarName c)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [k] iterable: (for_iter.Words words: [ {<'/etc/ssh_known_hosts'>} {<'/etc/ssh/ssh_known_hosts'>} { (word_part.TildeSub token: <Id.Lit_TildeLike '~'> ) <'/.ssh/known_hosts'> } ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {($ Id.VSub_DollarName k)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <egrep> more_env: [] words: [ {<egrep>} {<-v>} {(SQ <'^[#\\[]'>)} { ($ Id.VSub_DollarName k ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cut> more_env: [] words: [ {<cut>} {<-f>} {<1>} {<-d>} {(SQ <' '>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} {<-e>} {(SQ <'s/[,:].*//g'>)} ] redirects: [] do_fork: T ) ] ops: [ <Id.Op_Pipe _> <Id.Op_Pipe _> ] ) ] ops: [<Id.Op_DAmp _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Sentence child: (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} {<-n>} {<-e>} {(SQ <'s/^[0-9][0-9\\.]*//p'>)} {<'/etc/hosts'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) (command.Simple blame_tok: <tr> more_env: [] words: [{<tr>} {(SQ <'\\n'>)} {(SQ <' '>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-v>} {(SQ <'*'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] spids: [8067 8085] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_process_hostname_search='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_process_hostname_search='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_process_hostname_search='> name: p666_process_hostname_search ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/\\*/\\.\\*/g'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_process_hostname_list='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_process_hostname_list='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_process_hostname_list='> name: p666_process_hostname_list ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_all_host] iterable: (for_iter.Words words:[{(${ Id.VSub_Name p666_all_hosts)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_all_host_match='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_all_host_match='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_all_host_match='> name: p666_all_host_match ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(${ Id.VSub_Name p666_all_host)} {<Id.Lit_Colon ':'>} { (${ Id.VSub_Name p666_process_hostname_search) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_all_host_match)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_process_hostname_list='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_process_hostname_list='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_process_hostname_list=' > name: p666_process_hostname_list ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} { (DQ (${ Id.VSub_Name p666_process_hostname_list ) ) } {(DQ (${ Id.VSub_Name p666_all_host))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] spids: [8299 8314] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name p666_process_hostname_list))}] redirects: [] do_fork: T ) ] spids: [8043 8058] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <p666_process_options> name: p666_process_options body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'OPTIND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTIND='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTIND='> name:OPTIND) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <getopts> more_env: [] words: [ {<getopts>} {(DQ <'?vdqbskyah:u:c:e:p:w:r:o:z:i:'>)} {<p666_opt>} {(DQ (${ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName p666_opt))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_EscapedChar '\\?'> pattern: (pat.Words words: [ { (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\?'> ch: '?' ) } ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <p666_show_usage> more_env: [] words: [{<p666_show_usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <v> pattern: (pat.Words words:[{<v>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <p666_show_version> more_env: [] words: [{<p666_show_version>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <d> pattern: (pat.Words words:[{<d>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_debug='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_debug='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_debug='> name: p666_debug ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <q> pattern: (pat.Words words:[{<q>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_quiet='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_quiet='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_quiet='> name: p666_quiet ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <s> pattern: (pat.Words words:[{<s>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_skip_init='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_skip_init='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_skip_init='> name: p666_skip_init ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <k> pattern: (pat.Words words:[{<k>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_keep_exec='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_keep_exec='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_keep_exec='> name: p666_keep_exec ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <y> pattern: (pat.Words words:[{<y>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_skip_host_errors='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_skip_host_errors='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_skip_host_errors='> name: p666_skip_host_errors ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <a> pattern: (pat.Words words:[{<a>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_async_cubes='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_async_cubes='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_async_cubes='> name: p666_async_cubes ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <b> pattern: (pat.Words words:[{<b>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <p666_install> more_env: [] words: [{<p666_install>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <h> pattern: (pat.Words words:[{<h>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_processed_hostname='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_processed_hostname='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_processed_hostname='> name: p666_processed_hostname ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <p666_process_hostname> more_env: [] words: [ {<p666_process_hostname>} {(DQ (${ Id.VSub_Name OPTARG))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (${ Id.VSub_Name p666_processed_hostname) ) } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_hosts='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_hosts='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_hosts='> name: p666_hosts ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} {(DQ (${ Id.VSub_Name p666_hosts))} { (DQ (${ Id.VSub_Name p666_processed_hostname ) ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] spids: [8536 8555] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [ {<p666_printf_error>} { (DQ <'No known hosts match '> (${ Id.VSub_Name OPTARG) <' from '> (${ Id.VSub_Name p666_all_hosts) ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <c> pattern: (pat.Words words:[{<c>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cubes='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cubes='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cubes='> name: p666_cubes ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} {(DQ (${ Id.VSub_Name p666_cubes))} {(DQ (${ Id.VSub_Name OPTARG))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <i> pattern: (pat.Words words:[{<i>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_include_cubes='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_include_cubes='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_include_cubes='> name: p666_include_cubes ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} {(DQ (${ Id.VSub_Name p666_include_cubes))} {(DQ (${ Id.VSub_Name OPTARG))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <e> pattern: (pat.Words words:[{<e>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-r>} {(DQ (${ Id.VSub_Name OPTARG))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [ {<p666_printf_error>} { (DQ <'Could not find '> (${ Id.VSub_Name OPTARG) <' ENVAR script.'> ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [8658 8675] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts='> name: p666_envar_scripts ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} {(DQ (${ Id.VSub_Name p666_envar_scripts))} {(DQ (${ Id.VSub_Name OPTARG))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <u> pattern: (pat.Words words:[{<u>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_user='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_user='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_user='> name: p666_user ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name OPTARG))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <p> pattern: (pat.Words words:[{<p>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts_password='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts_password='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts_password='> name: p666_envar_scripts_password ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name OPTARG))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <w> pattern: (pat.Words words:[{<w>}]) middle: <Id.Right_CasePat _> action: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts_password='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts_password='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts_password='> name: p666_envar_scripts_password ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(${ Id.VSub_Name OPTARG)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <r> pattern: (pat.Words words:[{<r>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_roles='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_roles='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_roles='> name: p666_roles ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} {(DQ (${ Id.VSub_Name p666_roles))} {(DQ (${ Id.VSub_Name OPTARG))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <o> pattern: (pat.Words words:[{<o>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_option_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_option_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_option_name='> name: p666_option_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name OPTARG))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/=.*//'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_option_value='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_option_value='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_option_value='> name: p666_option_value ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name OPTARG))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} { (DQ <'s/^'> (${ Id.VSub_Name p666_option_name) <'=//'> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_option_value='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_option_value='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_option_value='> name: p666_option_value ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <p666_process_hostname> more_env: [] words: [ {<p666_process_hostname>} {(DQ (${ Id.VSub_Name p666_option_value))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_options='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_options='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_options='> name: p666_options ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} {(DQ (${ Id.VSub_Name p666_options))} { (DQ (${ Id.VSub_Name p666_option_name) <'='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (${ Id.VSub_Name p666_option_value) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') ) } {(DQ (${ Id.VSub_Name POSIXCUBE_NEWLINE))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <z> pattern: (pat.Words words:[{<z>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Name p666_specfile))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_foundspec='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_foundspec='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_foundspec='> name: p666_foundspec ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_foundspec_names='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_foundspec_names='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_foundspec_names='> name: p666_foundspec_names ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<p666_specfile_line>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_specfile_line_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_specfile_line_name=' > lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_specfile_line_name=' > name: p666_specfile_line_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Name p666_specfile_line ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} {(SQ <'s/=.*//'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_foundspec_names='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_foundspec_names='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_foundspec_names=' > name: p666_foundspec_names ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} { (DQ (${ Id.VSub_Name p666_foundspec_names ) ) } { (DQ (${ Id.VSub_Name p666_specfile_line_name ) ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (${ Id.VSub_Name p666_specfile_line_name ) ) } {<Id.Lit_Equals '='>} { (DQ (${ Id.VSub_Name OPTARG) ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_foundspec='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_foundspec=' > lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_foundspec=' > name: p666_foundspec ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_specfile_line_value=' > pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_specfile_line_value=' > lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_specfile_line_value=' > name: p666_specfile_line_value ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Name p666_specfile_line ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} { (DQ <'s/^'> (${ Id.VSub_Name p666_specfile_line_name ) <'=//'> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <p666_process_options> more_env: [] words: [ {<p666_process_options>} { (${ Id.VSub_Name p666_specfile_line_value ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] spids: [8976 8997] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [ (Redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ (${ Id.VSub_Name p666_specfile))} ) ] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_foundspec)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [ {<p666_printf_error>} { (DQ <'Could not find '> (${ Id.VSub_Name OPTARG) <' in '> (${ Id.VSub_Name p666_specfile) <' file with specs '> (${ Id.VSub_Name p666_foundspec_names) ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [9054 9069] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [8897 8912] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [ {<p666_printf_error>} { (DQ <'Could not find '> (${ Id.VSub_Name p666_specfile) <' file'> ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <p666_process_options> more_env: [] words: [{<p666_process_options>} {(DQ (${ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_envar_scripts_password))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) <'/.posixcube.pwd'> } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts_password='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts_password='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts_password='> name: p666_envar_scripts_password ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [ {<cat>} {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) <'/.posixcube.pwd'> } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [9148 9177] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [ {<shift>} { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: {(${ Id.VSub_Name OPTIND)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <-->)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_envar_scripts))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts='> name: p666_envar_scripts ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <ls> more_env: [] words: [{<ls>} {<-1>} {(${ Id.VSub_Name p666_default_envars)}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <paste> more_env: [] words: [{<paste>} {<-sd>} {(SQ <' '>)} {<->}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) ] spids: [9233 9251] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_envar_scripts))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Using ENVAR files: '> (${ Id.VSub_Name p666_envar_scripts) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] spids: [9287 9306] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_commands='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_commands='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_commands='> name:p666_commands) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_At '@'))} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_hosts))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_commands))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ (${ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <edit> pattern: (pat.Words words:[{<edit>} {<show>} {<source>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_envar_scripts))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_envar_script] iterable: (for_iter.Words words: [{(${ Id.VSub_Name p666_envar_scripts)}] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts_enc='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts_enc=' > lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts_enc=' > name: p666_envar_scripts_enc ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} { (${ Id.VSub_Name p666_envar_script ) } {<Id.Lit_Colon ':'>} {(SQ <'.*enc$'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (${ Id.VSub_Name p666_envar_scripts_enc ) } {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: < cube_command_exists > more_env: [] words: [ { < cube_command_exists > } {<gpg>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_script_new=' > pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_script_new=' > lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_script_new=' > name: p666_envar_script_new ) op: assign_op.Equal rhs: { (CommandSub left_token: < Id.Left_DollarParen '$(' > child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Name p666_envar_script ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} { (SQ < 's/enc$/dec/g' > ) } ] redirects: [] do_fork: T ) ] ops: [ <Id.Op_Pipe _> ] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: < Id.Lit_LBracket '[' > more_env: [] words: [ { < Id.Lit_LBracket '[' > } { (DQ (${ Id.VSub_Name p666_envar_scripts_password ) ) } { < Id.Lit_Equals '=' > } {(DQ )} { < Id.Lit_RBracket ']' > } ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ < 'Enter the password for ' > (${ Id.VSub_Name p666_envar_script) <':'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <gpg> more_env: [] words: [ {<gpg>} {<--output>} { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } {<--yes>} {<--decrypt>} { (DQ (${ Id.VSub_Name p666_envar_script ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: < cube_check_return > more_env: [] words: [ { < cube_check_return > } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [9518 9536] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ { <Id.Lit_LBracket '[' > } { (${ Id.VSub_Name p666_debug ) } {<-eq>} {<1>} { <Id.Lit_RBracket ']' > } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Decrypting '> (${ Id.VSub_Name p666_envar_script ) <' ...'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_gpg_output=' > pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_gpg_output=' > lhs: (sh_lhs_expr.Name left: < Id.Lit_VarLike 'p666_gpg_output=' > name: p666_gpg_output ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: < Id.Left_DollarParen '$(' > child: (command.Pipeline children: [ (command.Simple blame_tok: < echo > more_env: [] words: [ { < echo > } { (DQ (${ Id.VSub_Name p666_envar_scripts_password ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: < gpg > more_env: [] words: [ { < gpg > } { < --passphrase-fd > } { < 0 > } { < --batch > } { < --yes > } { < --output > } { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } { < --decrypt > } { (DQ (${ Id.VSub_Name p666_envar_script ) ) } ] redirects: [ (Redir op: < Id.Redir_GreatAnd '2>&' > loc: (redir_loc.Fd fd: 2 ) arg: { < 1 > } ) ] do_fork: T ) ] ops: [ < Id.Op_Pipe _ > ] ) right: < Id.Eof_RParen _ > ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [ {<cube_check_return>} { (DQ (${ Id.VSub_Name p666_gpg_output ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: { (DQ (${ Id.VSub_Number 1) ) } ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <show> pattern: (pat.Words words: [{<show>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Contents of '> (${ Id.VSub_Name p666_envar_script) <':'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [ {<cat>} { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <source> pattern: (pat.Words words: [{<source>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <chmod> more_env: [] words: [ {<chmod>} {<u> <Id.Lit_Other '+'> <x> } { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <.> more_env: [] words: [ {<.>} { (DQ (CommandSub left_token: < Id.Left_DollarParen '$(' > child: (command.Simple blame_tok: < cube_readlink > more_env: [] words: [ { < cube_readlink > } { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } ] redirects: [] do_fork: T ) right: < Id.Eof_RParen _ > ) ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: < Id.Lit_LBracket '[' > more_env: [] words: [ { < Id.Lit_LBracket '[' > } { (${ Id.VSub_Name p666_debug ) } {<-eq>} {<1>} { < Id.Lit_RBracket ']' > } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Sourced '> (${ Id.VSub_Name p666_envar_script) <...> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <edit> pattern: (pat.Words words: [{<edit>}] ) middle: <Id.Right_CasePat _> action: [ (command.AndOr children: [ (command.Simple blame_tok: < Id.Left_DoubleQuote '"' > more_env: [] words: [ { (DQ (BracedVarSub left: < Id.Left_DollarBrace '${' > token: < Id.VSub_Name EDITOR > var_name: EDITOR suffix_op: (suffix_op.Unary op: < Id.VTest_ColonHyphen _ > arg_word: { < vi > } ) right: < Id.Right_DollarBrace '}' > ) ) } { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: < cube_check_return > more_env: [] words: [ { < cube_check_return > } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: < Id.Lit_LBracket '[' > more_env: [] words: [ { < Id.Lit_LBracket '[' > } { (DQ (${ Id.VSub_Name p666_envar_scripts_password ) ) } { < Id.Lit_Equals '=' > } {(DQ )} { < Id.Lit_RBracket ']' > } ] redirects: [] do_fork: T ) terminator: < Id.Op_Semi _ > ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: < p666_printf > more_env: [] words: [ { < p666_printf > } { (DQ < 'Enter the password to re-encrypt ' > (${ Id.VSub_Name p666_envar_script) <':'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <gpg> more_env: [] words: [ {<gpg>} {<--yes>} { < --s2k-mode > } {<3>} { < --s2k-count > } {<65536>} { < --force-mdc > } { < --cipher-algo > } { < AES256 > } { < --s2k-digest-algo > } { < SHA512 > } {<-o>} { (DQ (${ Id.VSub_Name p666_envar_script ) ) } { < --symmetric > } { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: < cube_check_return > more_env: [] words: [ { < cube_check_return > } ] redirects: [] do_fork: T ) ] ops: [ < Id.Op_DPipe _ > ] ) ] spids: [9794 9812] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Simple blame_tok: < Id.Lit_LBracket '[' > more_env: [] words: [ { < Id.Lit_LBracket '[' > } { (${ Id.VSub_Name p666_debug ) } {<-eq>} {<1>} { < Id.Lit_RBracket ']' > } ] redirects: [] do_fork: T ) (command.Simple blame_tok: < p666_printf > more_env: [] words: [ { < p666_printf > } { (DQ < 'Re-encrypting ' > (${ Id.VSub_Name p666_envar_script) <' ...'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [ <Id.Op_DAmp _> ] ) (command.AndOr children: [ (command.ShAssignment left: < Id.Lit_VarLike 'p666_gpg_output=' > pairs: [ (AssignPair left: < Id.Lit_VarLike 'p666_gpg_output=' > lhs: (sh_lhs_expr.Name left: < Id.Lit_VarLike 'p666_gpg_output=' > name: p666_gpg_output ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: < Id.Left_DollarParen '$(' > child: (command.Pipeline children: [ (command.Simple blame_tok: < echo > more_env: [] words: [ { < echo > } { (DQ (${ Id.VSub_Name p666_envar_scripts_password ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: < gpg > more_env: [] 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 (${ Id.VSub_Name p666_envar_script ) ) } { < --symmetric > } { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } ] redirects: [ (Redir op: < Id.Redir_GreatAnd '2>&' > loc: (redir_loc.Fd fd: 2 ) arg: { < 1 > } ) ] do_fork: T ) ] ops: [ < Id.Op_Pipe _ > ] ) right: < Id.Eof_RParen _ > ) ) } ) ] redirects: [] ) (command.Simple blame_tok: < cube_check_return > more_env: [] words: [ { < cube_check_return > } { (DQ (${ Id.VSub_Name p666_gpg_output ) ) } ] redirects: [] do_fork: T ) ] ops: [ <Id.Op_DPipe _> ] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words: [ {<Id.Lit_Star '*'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <p666_show_usage> more_env: [] words: [ {<p666_show_usage>} { (DQ < 'Not implemented' > ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {<-f>} { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [ {<cube_check_return>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [9485 9493] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_show_usage> more_env: [] words: [ {<p666_show_usage>} { (DQ < 'gpg program not found on the PATH' > ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [9467 9482] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: {(DQ (${ Id.VSub_Number 1))} ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <show> pattern: (pat.Words words:[{<show>}]) middle: <Id.Right_CasePat _> action: [ (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [ {<cat>} { (DQ (${ Id.VSub_Name p666_envar_script ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<-v>} { (DQ <'^#!/bin/sh'> <Id.Lit_Dollar '$'> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <source> pattern: (pat.Words words:[{<source>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <.> more_env: [] words: [ {<.>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$(' > child: (command.Simple blame_tok: <cube_readlink> more_env: [] words: [ {<cube_readlink>} { (DQ (${ Id.VSub_Name p666_envar_script ) ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (${ Id.VSub_Name p666_debug) } {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Sourced '> (${ Id.VSub_Name p666_envar_script ) <...> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words: [{<Id.Lit_Star '*'>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <p666_show_usage> more_env: [] words: [ {<p666_show_usage>} {(DQ <'Not implemented'>)} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ (${ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <source> pattern: (pat.Words words:[{<source>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [9415 9434] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_show_usage> more_env: [] words: [ {<p666_show_usage>} { (DQ <'Sub-COMMAND without -e ENVAR file and '> (${ Id.VSub_Name p666_default_envars) <' not found.'> ) } ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ (${ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <source> pattern: (pat.Words words:[{<source>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <p666_show_usage> more_env: [] words: [ {<p666_show_usage>} {(DQ <'Unknown sub-COMMAND '> (${ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [9374 9393] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_show_usage> more_env: [] words: [ {<p666_show_usage>} {(DQ <'No hosts specified with -h and no sub-COMMAND specified.'>)} ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [9349 9367] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name POSIXCUBE_SOURCED))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_commands))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_cubes))} {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <p666_show_usage> more_env: [] words: [{<p666_show_usage>} {(DQ <'No COMMANDs or CUBEs specified.'>)}] redirects: [] do_fork: T ) ] spids: [10297 10332] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_show_version> more_env: [] words: [{<p666_show_version>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ShFunction name_tok: <p666_handle_remote_response> name: p666_handle_remote_response body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_handle_remote_response_context='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_handle_remote_response_context='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_handle_remote_response_context='> name: p666_handle_remote_response_context ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (${ Id.VSub_Name p666_handle_remote_response_context ) ) } {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_handle_remote_response_context='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_handle_remote_response_context='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_handle_remote_response_context=' > name: p666_handle_remote_response_context ) op: assign_op.Equal rhs: {(DQ <'Last command'>)} ) ] redirects: [] ) ] spids: [10380 10398] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_host_output_color='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_host_output_color='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_host_output_color='> name: p666_host_output_color ) op: assign_op.Equal rhs: {(${ Id.VSub_Name POSIXCUBE_COLOR_GREEN)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_host_output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_host_output='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_host_output='> name: p666_host_output ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_host_output_result)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_host_output_color='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_host_output_color='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_host_output_color='> name: p666_host_output_color ) op: assign_op.Equal rhs: {(${ Id.VSub_Name POSIXCUBE_COLOR_RED)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_host_output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_host_output='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_host_output='> name: p666_host_output ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_handle_remote_response_context) <' failed with return code '> (${ Id.VSub_Name p666_host_output_result) ) } ) ] redirects: [] ) ] spids: [10421 10436] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_host_output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_host_output='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_host_output='> name: p666_host_output ) op: assign_op.Equal rhs: {(DQ <'Commands succeeded.'>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_host_output))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'['> (${ Id.VSub_Name p666_host_output_color) (${ Id.VSub_Name p666_host) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] %s'> <Id.Lit_BadBackslash '\\'> <n> ) } {(DQ (${ Id.VSub_Name p666_host_output))} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_host_output_result)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <p666_exit> more_env: [] words: [{<p666_exit>} {(${ Id.VSub_Name p666_host_output_result)}] redirects: [] do_fork: T ) ] spids: [10526 10541] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <p666_remote_ssh> name: p666_remote_ssh body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_remote_ssh_commands='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_remote_ssh_commands='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_remote_ssh_commands='> name: p666_remote_ssh_commands ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'['> (${ Id.VSub_Name POSIXCUBE_COLOR_GREEN) (${ Id.VSub_Name p666_host) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] Executing ssh '> (${ Id.VSub_Name p666_user) <'@'> (${ Id.VSub_Name p666_host) <' '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') (${ Id.VSub_Name p666_remote_ssh_commands) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' ...'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_parallel)} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_async)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Sentence child: (command.Simple blame_tok: <ssh> more_env: [] words: [ {<ssh>} {<-o>} {<Id.Lit_VarLike 'ConnectTimeout='> <10>} {(${ Id.VSub_Name p666_user) <Id.Lit_At '@'> (${ Id.VSub_Name p666_host) } {(${ Id.VSub_Name p666_remote_ssh_commands)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) terminator: <Id.Op_Amp _> ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_wait_pids='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_wait_pids='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_wait_pids='> name: p666_wait_pids ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} {(DQ (${ Id.VSub_Name p666_wait_pids))} {(DQ ($ Id.VSub_Bang '!'))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] spids: [10620 10649] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <ssh> more_env: [] words: [ {<ssh>} {<-o>} {<Id.Lit_VarLike 'ConnectTimeout='> <10>} {(${ Id.VSub_Name p666_user) <Id.Lit_At '@'> (${ Id.VSub_Name p666_host) } {(${ Id.VSub_Name p666_remote_ssh_commands)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_host_output_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_host_output_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_host_output_result='> name: p666_host_output_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Finished executing on '> (${ Id.VSub_Name p666_host) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <p666_handle_remote_response> more_env: [] words: [ {<p666_handle_remote_response>} {(DQ <'Remote commands through SSH'>)} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {(${ Id.VSub_Name p666_host_output_result)} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <p666_remote_transfer> name: p666_remote_transfer body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_remote_transfer_source='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_remote_transfer_source='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_remote_transfer_source='> name: p666_remote_transfer_source ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_remote_transfer_dest='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_remote_transfer_dest='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_remote_transfer_dest='> name: p666_remote_transfer_dest ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'['> (${ Id.VSub_Name POSIXCUBE_COLOR_GREEN) (${ Id.VSub_Name p666_host) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] Executing rsync '> (${ Id.VSub_Name p666_remote_transfer_source) <' to '> (${ Id.VSub_Name p666_user) <'@'> (${ Id.VSub_Name p666_host) <':'> (${ Id.VSub_Name p666_remote_transfer_dest) <' ...'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_parallel)} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_async)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Rsyncing in background: '> (${ Id.VSub_Name p666_remote_transfer_source) <' '> (${ Id.VSub_Name p666_user) <'@'> (${ Id.VSub_Name p666_host) <':'> (${ Id.VSub_Name p666_remote_transfer_dest) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Sentence child: (command.Simple blame_tok: <rsync> more_env: [] words: [ {<rsync>} {<-rlpt>} {(${ Id.VSub_Name p666_remote_transfer_source)} { (DQ (${ Id.VSub_Name p666_user) <'@'> (${ Id.VSub_Name p666_host) <':'> (${ Id.VSub_Name p666_remote_transfer_dest) ) } ] redirects: [] do_fork: T ) terminator: <Id.Op_Amp _> ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_wait_pids='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_wait_pids='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_wait_pids='> name: p666_wait_pids ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} {(DQ (${ Id.VSub_Name p666_wait_pids))} {(DQ ($ Id.VSub_Bang '!'))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] spids: [10848 10877] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Rsyncing in foreground: '> (${ Id.VSub_Name p666_remote_transfer_source) <' '> (${ Id.VSub_Name p666_user) <'@'> (${ Id.VSub_Name p666_host) <':'> (${ Id.VSub_Name p666_remote_transfer_dest) <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <rsync> more_env: [] words: [ {<rsync>} {<-rlpt>} {(${ Id.VSub_Name p666_remote_transfer_source)} { (DQ (${ Id.VSub_Name p666_user) <'@'> (${ Id.VSub_Name p666_host) <':'> (${ Id.VSub_Name p666_remote_transfer_dest) ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_host_output_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_host_output_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_host_output_result='> name: p666_host_output_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.Simple blame_tok: <p666_handle_remote_response> more_env: [] words: [{<p666_handle_remote_response>} {(DQ <rsync>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_cubedir='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cubedir='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cubedir='> name: p666_cubedir ) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name p666_cubedir> var_name: p666_cubedir suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Slash '/'>} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_name='> name: p666_script_name ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_current_script_name> more_env: [] words: [{<cube_current_script_name>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_path='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_path='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_path='> name: p666_script_path ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_current_script_abs_path> more_env: [] words: [{<cube_current_script_abs_path>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_remote_script='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_remote_script='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_remote_script='> name: p666_remote_script ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_cubedir) <'/'> (${ Id.VSub_Name p666_script_name) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_contents='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_contents='> name: p666_script_contents ) op: assign_op.Equal rhs: { (DQ <'cube_initial_directory='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'{PWD}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_envar_contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_envar_contents='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_envar_contents='> name: p666_script_envar_contents ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts_final='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts_final='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts_final='> name: p666_envar_scripts_final ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_envar_script] iterable: (for_iter.Words words:[{(${ Id.VSub_Name p666_envar_scripts)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_script_remove='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_script_remove='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_script_remove='> name: p666_envar_script_remove ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_script_enc_matches='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_script_enc_matches='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_script_enc_matches='> name: p666_envar_script_enc_matches ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {(${ Id.VSub_Name p666_envar_script)} {<Id.Lit_Colon ':'>} {(SQ <'.*\\.enc$'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_envar_script_enc_matches)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cube_command_exists> more_env: [] words: [{<cube_command_exists>} {<gpg>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Decrypting '> (${ Id.VSub_Name p666_envar_script) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_script_new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_script_new='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_script_new='> name: p666_envar_script_new ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Name p666_envar_script ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {(SQ <'s/enc$/dec/g'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (${ Id.VSub_Name p666_envar_scripts_password ) ) } {<Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Enter the password for '> (${ Id.VSub_Name p666_envar_script) <':'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <gpg> more_env: [] words: [ {<gpg>} {<--output>} { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } {<--yes>} {<--decrypt>} {(DQ (${ Id.VSub_Name p666_envar_script))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [{<cube_check_return>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [11224 11242] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Decrypting '> (${ Id.VSub_Name p666_envar_script) <' ...'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_gpg_output='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_gpg_output='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_gpg_output='> name: p666_gpg_output ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Name p666_envar_scripts_password ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <gpg> more_env: [] words: [ {<gpg>} {<--passphrase-fd>} {<0>} {<--batch>} {<--yes>} {<--output>} { (DQ (${ Id.VSub_Name p666_envar_script_new ) ) } {<--decrypt>} { (DQ (${ Id.VSub_Name p666_envar_script ) ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '2>&' > loc: (redir_loc.Fd fd: 2 ) arg: {<1>} ) ] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <cube_check_return> more_env: [] words: [ {<cube_check_return>} {(DQ (${ Id.VSub_Name p666_gpg_output))} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_script='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_script='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_script='> name: p666_envar_script ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name p666_envar_script_new))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_script_remove='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_script_remove='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_script_remove='> name: p666_envar_script_remove ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] spids: [11165 11173] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [ {<p666_printf_error>} {(DQ <'gpg program not found on the PATH'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_exit> more_env: [] words: [{<p666_exit>} {<1>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [11147 11162] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts_final='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts_final='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts_final='> name: p666_envar_scripts_final ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cube_append_str> more_env: [] words: [ {<cube_append_str>} {(DQ (${ Id.VSub_Name p666_envar_scripts_final))} {(DQ (${ Id.VSub_Name p666_envar_script))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <chmod> more_env: [] words: [ {<chmod>} {<u> <Id.Lit_Other '+'> <x>} {(DQ (${ Id.VSub_Name p666_envar_script))} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_contents='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_contents='> name: p666_script_contents ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_script_contents) <'\n'> <'cd '> (${ Id.VSub_Name p666_cubedir) <'/ || cube_check_return\n'> <'. '> (${ Id.VSub_Name p666_cubedir) <'/'> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(${ Id.VSub_Name p666_envar_script)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <' || cube_check_return'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_envar_script_remove)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_contents='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_contents='> name: p666_script_contents ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_script_contents) <'\n'> <'rm -f '> (${ Id.VSub_Name p666_cubedir) <'/'> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(${ Id.VSub_Name p666_envar_script)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <' || cube_check_return'> ) } ) ] redirects: [] ) ] spids: [11471 11486] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_envar_scripts='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_envar_scripts='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_envar_scripts='> name: p666_envar_scripts ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name p666_envar_scripts_final))} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_cube] iterable: (for_iter.Words words:[{(${ Id.VSub_Name p666_cubes)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {(DQ (${ Id.VSub_Name p666_cube))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube_name='> name: p666_cube_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name p666_cube))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} { (DQ (${ Id.VSub_Name p666_cube) <'/'> (${ Id.VSub_Name p666_cube_name) <.sh> ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <chmod> more_env: [] words: [ {<chmod>} {<u> <Id.Lit_Other '+'> <x>} {(${ Id.VSub_Name p666_cube) <'/'> <Id.Lit_Star '*'> <.sh> } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube='> name: p666_cube ) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name p666_cube> var_name: p666_cube suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Slash '/'>} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_contents='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_contents='> name: p666_script_contents ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_script_contents) <'\n'> <'cd '> (${ Id.VSub_Name p666_cubedir) <'/'> (${ Id.VSub_Name p666_cube) <'/ || cube_check_return\n'> <'cube_echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'Started cube: '> (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'\n'> <'POSIXCUBE_CUBE_NAME='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' POSIXCUBE_CUBE_NAME_WITH_PREFIX='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' '> (${ Id.VSub_Name p666_cube_name) <.sh> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' . '> (${ Id.VSub_Name p666_cubedir) <'/'> (${ Id.VSub_Name p666_cube) <'/'> (${ Id.VSub_Name p666_cube_name) <'.sh || cube_check_return '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'Last command in cube'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'\n'> <'cube_echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'Finished cube: '> (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'\n'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} { (DQ (${ Id.VSub_Name p666_cube) <'/envars.sh'> ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_envar_contents=' > pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_envar_contents=' > lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_envar_contents=' > name: p666_script_envar_contents ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_script_envar_contents ) <'\n'> <'. '> (${ Id.VSub_Name p666_cubedir) <'/'> (${ Id.VSub_Name p666_cube) <'/envars.sh || cube_check_return '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'Failed loading cube envars'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'\n'> ) } ) ] redirects: [] ) ] spids: [11683 11699] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [11573 11593] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [ {<p666_printf_error>} { (DQ <'Could not find '> (${ Id.VSub_Name p666_cube_name) <'.sh in cube '> (${ Id.VSub_Name p666_cube) <' directory.'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_exit> more_env: [] words: [{<p666_exit>} {<1>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [11543 11558] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Name p666_cube))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube_name='> name: p666_cube_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name p666_cube))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <chmod> more_env: [] words: [ {<chmod>} {<u> <Id.Lit_Other '+'> <x>} {(DQ (${ Id.VSub_Name p666_cube))} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_contents='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_contents='> name: p666_script_contents ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_script_contents) <'\n'> <'cd '> (${ Id.VSub_Name p666_cubedir) <'/ || cube_check_return\n'> <'cube_echo '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'Started cube: '> (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'\n'> <'POSIXCUBE_CUBE_NAME='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' POSIXCUBE_CUBE_NAME_WITH_PREFIX='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' '> (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' . '> (${ Id.VSub_Name p666_cubedir) <'/'> (${ Id.VSub_Name p666_cube_name) <' || cube_check_return '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'Last command in cube'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'\n'> <'cube_echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'Finished cube: '> (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'\n'> ) } ) ] redirects: [] ) ] spids: [11753 11768] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Name p666_cube) <.sh>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube_name='> name: p666_cube_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name p666_cube) <.sh>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <chmod> more_env: [] words: [ {<chmod>} {<u> <Id.Lit_Other '+'> <x>} {(DQ (${ Id.VSub_Name p666_cube) <.sh>)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_contents='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_contents='> name: p666_script_contents ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_script_contents) <'\n'> <'cd '> (${ Id.VSub_Name p666_cubedir) <'/ || cube_check_return\n'> <'cube_echo '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'Started cube: '> (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'\n'> <'POSIXCUBE_CUBE_NAME='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' POSIXCUBE_CUBE_NAME_WITH_PREFIX='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' '> (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' . '> (${ Id.VSub_Name p666_cubedir) <'/'> (${ Id.VSub_Name p666_cube_name) <' || cube_check_return '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'Last command in cube'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'\n'> <'cube_echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'Finished cube: '> (${ Id.VSub_Name p666_cube_name) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'\n'> ) } ) ] redirects: [] ) ] spids: [11852 11868] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [ {<p666_printf_error>} { (DQ <'Cube '> (${ Id.VSub_Name p666_cube) < ' could not be found as a directory or script, or you don\'t have read permissions.' > ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_exit> more_env: [] words: [{<p666_exit>} {<1>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_contents='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_contents='> name: p666_script_contents ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_script_contents) (${ Id.VSub_Name POSIXCUBE_NEWLINE) <'cd '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'{cube_initial_directory}'> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_cube] iterable: (for_iter.Words words:[{(${ Id.VSub_Name p666_include_cubes)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {(DQ (${ Id.VSub_Name p666_cube))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube_name='> name: p666_cube_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name p666_cube))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} { (DQ (${ Id.VSub_Name p666_cube) <'/'> (${ Id.VSub_Name p666_cube_name) <.sh> ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <chmod> more_env: [] words: [ {<chmod>} {<u> <Id.Lit_Other '+'> <x>} {(${ Id.VSub_Name p666_cube) <'/'> <Id.Lit_Star '*'> <.sh> } ] redirects: [] do_fork: T ) ] spids: [12039 12059] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [12009 12024] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Name p666_cube))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <chmod> more_env: [] words: [ {<chmod>} {<u> <Id.Lit_Other '+'> <x>} {(DQ (${ Id.VSub_Name p666_cube))} ] redirects: [] do_fork: T ) ] spids: [12079 12094] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Name p666_cube) <.sh>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <chmod> more_env: [] words: [ {<chmod>} {<u> <Id.Lit_Other '+'> <x>} {(DQ (${ Id.VSub_Name p666_cube) <.sh>)} ] redirects: [] do_fork: T ) ] spids: [12110 12126] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [ {<p666_printf_error>} { (DQ <'Cube '> (${ Id.VSub_Name p666_cube) < ' could not be found as a directory or script, or you don\'t have read permissions.' > ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_exit> more_env: [] words: [{<p666_exit>} {<1>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_commands))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_script_contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script_contents='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script_contents='> name: p666_script_contents ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_script_contents) <'\n'> <' '> (${ Id.VSub_Name p666_commands) ) } ) ] redirects: [] ) ] spids: [12170 12189] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_script='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_script='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_script='> name: p666_script ) op: assign_op.Equal rhs: {(DQ <'./cube_exec.sh'>)} ) ] redirects: [] ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<HEREDOC>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'#!/bin/sh\n'> <'POSIXCUBE_APIS_ONLY=1\n'> <'. '> (${ Id.VSub_Name p666_remote_script) <'\n'> <'if [ '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'? -ne 0 ] ; then\n'> <' echo '> <Id.Right_DoubleQuote '"'> <'Could not source '> (${ Id.VSub_Name p666_remote_script) <' script'> <Id.Right_DoubleQuote '"'> <' 1>&2\n'> <' exit 1\n'> <'fi\n'> <'\n'> <'POSIXCUBE_DEBUG='> (${ Id.VSub_Name p666_debug) <'\n'> <'cubevar_api_roles='> <Id.Right_DoubleQuote '"'> (${ Id.VSub_Name p666_roles) <Id.Right_DoubleQuote '"'> <'\n'> (${ Id.VSub_Name p666_script_envar_contents) <'\n'> (${ Id.VSub_Name p666_options) <'\n'> (${ Id.VSub_Name p666_script_contents) <'\n'> <'\n'> <'if [ '> <Id.Right_DoubleQuote '"'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'{cubevar_api_post_restart}'> <Id.Right_DoubleQuote '"'> <' != '> <Id.Right_DoubleQuote '"'> <Id.Right_DoubleQuote '"'> <' ]; then\n'> <' for p666_post in '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'{cubevar_api_post_restart}; do\n'> <' cube_service restart '> <Id.Right_DoubleQuote '"'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'{p666_post}'> <Id.Right_DoubleQuote '"'> <'\n'> <' done\n'> <'fi\n'> ] ) ) (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ (${ Id.VSub_Name p666_script))} ) ] do_fork: T ) (command.Simple blame_tok: <chmod> more_env: [] words: [{<chmod>} {<Id.Lit_Other '+'> <x>} {(DQ (${ Id.VSub_Name p666_script))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_upload='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_upload='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_upload='> name: p666_upload ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name p666_script) <' '>)} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_cubes))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_cube] iterable: (for_iter.Words words:[{(${ Id.VSub_Name p666_cubes)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {(DQ (${ Id.VSub_Name p666_cube))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube_name='> name: p666_cube_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name p666_cube))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} { (DQ (${ Id.VSub_Name p666_cube) <'/'> (${ Id.VSub_Name p666_cube_name) <.sh> ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube='> name: p666_cube ) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name p666_cube> var_name: p666_cube suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Slash '/'>} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_upload='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_upload='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_upload='> name: p666_upload ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_upload) <' '> (${ Id.VSub_Name p666_cube) ) } ) ] redirects: [] ) ] spids: [12392 12412] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [12362 12377] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Name p666_cube))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube_name='> name: p666_cube_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name p666_cube))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_upload='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_upload='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_upload='> name: p666_upload ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_upload) <' '> (${ Id.VSub_Name p666_cube) ) } ) ] redirects: [] ) ] spids: [12438 12453] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Name p666_cube) <.sh>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube_name='> name: p666_cube_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name p666_cube) <.sh>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_upload='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_upload='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_upload='> name: p666_upload ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_upload) <' '> (${ Id.VSub_Name p666_cube) <.sh> ) } ) ] redirects: [] ) ] spids: [12480 12496] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] spids: [12326 12345] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_include_cubes))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_cube] iterable: (for_iter.Words words: [{(${ Id.VSub_Name p666_include_cubes)}] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {(DQ (${ Id.VSub_Name p666_cube))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube_name='> name: p666_cube_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name p666_cube))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} { (DQ (${ Id.VSub_Name p666_cube) <'/'> (${ Id.VSub_Name p666_cube_name) <.sh> ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube='> name: p666_cube ) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name p666_cube> var_name: p666_cube suffix_op: (suffix_op.Unary op: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Slash '/'>} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_upload='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_upload='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_upload='> name: p666_upload ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_upload) <' '> (${ Id.VSub_Name p666_cube) ) } ) ] redirects: [] ) ] spids: [12601 12621] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [12571 12586] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Name p666_cube))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube_name='> name: p666_cube_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name p666_cube))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_upload='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_upload='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_upload='> name: p666_upload ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_upload) <' '> (${ Id.VSub_Name p666_cube) ) } ) ] redirects: [] ) ] spids: [12647 12662] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {(DQ (${ Id.VSub_Name p666_cube) <.sh>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_cube_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_cube_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_cube_name='> name: p666_cube_name ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [ {<basename>} {(DQ (${ Id.VSub_Name p666_cube) <.sh>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_upload='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_upload='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_upload='> name: p666_upload ) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name p666_upload) <' '> (${ Id.VSub_Name p666_cube) <.sh> ) } ) ] redirects: [] ) ] spids: [12689 12705] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_printf_error> more_env: [] words: [ {<p666_printf_error>} {(DQ <'Could not find '> (${ Id.VSub_Name p666_cube))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_exit> more_env: [] words: [{<p666_exit>} {<1>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] spids: [12535 12554] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_quiet)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Transferring files to hosts: '> (${ Id.VSub_Name p666_hosts) <' ...'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_async='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_async='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_async='> name:p666_async) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_skip_init)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'p666_wait_pids='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_wait_pids='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_wait_pids='> name: p666_wait_pids ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_host] iterable: (for_iter.Words words:[{(${ Id.VSub_Name p666_hosts)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <p666_remote_ssh> more_env: [] words: [ {<p666_remote_ssh>} { (DQ <'[ ! -d '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (${ Id.VSub_Name p666_cubedir) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' ] && mkdir -p '> (${ Id.VSub_Name p666_cubedir) <'; RC='> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) < '?; command -v rsync >/dev/null 2>&1 || (command -v apt-get >/dev/null 2>&1 && apt-get -y install rsync); exit ' > (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'{RC};'> ) } ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_wait_pids))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Waiting on initialization PIDs: '> (${ Id.VSub_Name p666_wait_pids) <' ...'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <wait> more_env: [] words: [{<wait>} {(${ Id.VSub_Name p666_wait_pids)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_host_output_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_host_output_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_host_output_result='> name: p666_host_output_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.Simple blame_tok: <p666_handle_remote_response> more_env: [] words: [ {<p666_handle_remote_response>} {(DQ <'Remote commands through SSH'>)} ] redirects: [] do_fork: T ) ] spids: [12866 12885] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [12797 12812] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_wait_pids='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_wait_pids='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_wait_pids='> name: p666_wait_pids ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_host] iterable: (for_iter.Words words:[{(${ Id.VSub_Name p666_hosts)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_skip_init)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <p666_remote_transfer> more_env: [] words: [ {<p666_remote_transfer>} { (DQ (${ Id.VSub_Name p666_upload) <' '> (${ Id.VSub_Name p666_script_path) <' '> (${ Id.VSub_Name p666_envar_scripts) ) } {(DQ (${ Id.VSub_Name p666_cubedir) <'/'>)} ] redirects: [] do_fork: T ) ] spids: [12960 12975] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <p666_remote_transfer> more_env: [] words: [ {<p666_remote_transfer>} { (DQ (${ Id.VSub_Name p666_upload) <' '> (${ Id.VSub_Name p666_envar_scripts) ) } {(DQ (${ Id.VSub_Name p666_cubedir) <'/'>)} ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_wait_pids))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Waiting on transfer PIDs: '> (${ Id.VSub_Name p666_wait_pids) <' ...'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <wait> more_env: [] words: [{<wait>} {(${ Id.VSub_Name p666_wait_pids)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_host_output_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_host_output_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_host_output_result='> name: p666_host_output_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.Simple blame_tok: <p666_handle_remote_response> more_env: [] words: [{<p666_handle_remote_response>} {(DQ <rsync>)}] redirects: [] do_fork: T ) ] spids: [13033 13052] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_wait_pids='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_wait_pids='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_wait_pids='> name: p666_wait_pids ) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_async='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_async='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'p666_async='> name:p666_async) op: assign_op.Equal rhs: {(${ Id.VSub_Name p666_async_cubes)} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [p666_host] iterable: (for_iter.Words words:[{(${ Id.VSub_Name p666_hosts)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_quiet)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'['> (${ Id.VSub_Name POSIXCUBE_COLOR_GREEN) (${ Id.VSub_Name p666_host) (${ Id.VSub_Name POSIXCUBE_COLOR_RESET) <'] Executing on '> (${ Id.VSub_Name p666_host) <' ...'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <p666_remote_ssh> more_env: [] words: [ {<p666_remote_ssh>} { (DQ <'. '> (${ Id.VSub_Name p666_cubedir) <'/'> (${ Id.VSub_Name p666_script) ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_remote_ssh_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_remote_ssh_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_remote_ssh_result='> name: p666_remote_ssh_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_async)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_skip_host_errors)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_remote_ssh_result)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_exit> more_env: [] words: [ {<p666_exit>} {(${ Id.VSub_Name p666_remote_ssh_result)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] spids: [13186 13201] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name p666_wait_pids))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name p666_debug)} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <p666_printf> more_env: [] words: [ {<p666_printf>} { (DQ <'Waiting on cube execution PIDs: '> (${ Id.VSub_Name p666_wait_pids) <' ...'> <Id.Lit_BadBackslash '\\'> <n> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <wait> more_env: [] words: [{<wait>} {(${ Id.VSub_Name p666_wait_pids)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'p666_host_output_result='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'p666_host_output_result='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'p666_host_output_result='> name: p666_host_output_result ) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.Simple blame_tok: <p666_handle_remote_response> more_env: [] words: [{<p666_handle_remote_response>} {(DQ <'Cube execution'>)}] redirects: [] do_fork: T ) ] spids: [13246 13265] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <p666_exit> more_env: [] words: [{<p666_exit>} {<0>}] redirects: [] do_fork: T ) ] spids: [10276 10294] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [7333 7351] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] )