diff --git a/macos-guest-virtualbox.sh b/macos-guest-virtualbox.sh index 38698f4..691f056 100755 --- a/macos-guest-virtualbox.sh +++ b/macos-guest-virtualbox.sh @@ -1096,17 +1096,25 @@ fi function and_all_subsequent_stages() { # if exactly two arguments were specified on the command line, and the first is a stage title, # then perform all stages subsequent to the specified stage, otherwise do nothing. - # first_argument is already sanitized so it's safe (though incorrect) to use as a regex (for brevity) - first_argument=${specified_arguments%% *} - last_argument=${specified_arguments##* } - [[ "${first_argument} ${last_argument}" = "${specified_arguments}" ]] && \ - [[ "${stages}" =~ "${first_argument}" ]] && \ - for stage in ${stages##*${first_argument}}; do ${stage}; done + if [[ ${#specified_arguments[@]} == 2 ]]; then + local stage + local first_argument=${specified_arguments[0]} + local run=n + + for stage in "${stages[@]}"; do + [[ $run == n ]] || "$stage" + + if [[ $stage == "$first_argument" ]]; then + # Run all subsequent stages. + run=y + fi + done + fi } function documentation() { low_contrast_stages="" -for stage in ${stages}; do +for stage in "${stages[@]}"; do low_contrast_stages="${low_contrast_stages}"' '"${low_contrast_color}${stage}${default_color}"$'\n' done echo -ne "\n ${highlight_color}NAME${default_color} @@ -1685,7 +1693,7 @@ function prompt_delete_y_n() { # command-line argument processing check_shell -stages=' +stages=( check_gnu_coreutils_prefix set_variables welcome @@ -1703,27 +1711,58 @@ stages=' create_target_virtual_disk populate_macos_target_disk prompt_delete_temporary_files -' -[[ -z "${1}" ]] && for stage in ${stages}; do ${stage}; done && exit -[[ "${1}" = "documentation" ]] && documentation && exit -valid_arguments=(${stages//$'[\r\n]'/ } check_shell troubleshoot documentation and_all_subsequent_stages) -specified_arguments="$@" # this variable is used in the function "and_all_subsequent_stages" -for specified_arg in "$@"; do - there_is_a_match="" - # doing matching the long way to prevent delimiter confusion - for valid_arg in "${valid_arguments[@]}"; do - [[ "${valid_arg}" = "${specified_arg}" ]] && there_is_a_match="true" && break +) + +if [[ $# == 0 ]]; then + for stage in "${stages[@]}"; do + "$stage" done - if [[ -z "${there_is_a_match}" ]]; then - echo -e "\nOne or more specified arguments is not recognized." - echo -e "\nRecognized stages:\n${stages}" - echo -e "Other recognized arguments:\n\n check_shell\n documentation\n troubleshoot\n and_all_subsequent_stages" - echo -e "\nView documentation by entering the following command:" - would_you_like_to_know_less + + exit +fi + +if [[ $1 == documentation ]]; then + documentation + exit +fi + +other_commands=( + check_shell + troubleshoot + documentation + and_all_subsequent_stages +) + +specified_arguments=("$@") # this variable is used in the function "and_all_subsequent_stages" +for specified_arg; do + there_is_a_match=n + for valid_arg in "${stages[@]}" "${other_commands[@]}"; do + if [[ $valid_arg == "$specified_arg" ]]; then + there_is_a_match=y + break + fi + done + + if [[ $there_is_a_match == n ]]; then + cat <