Tidy the script startup code

This commit is contained in:
slowpeek
2021-10-13 17:03:56 +03:00
parent d8fe2f6ed2
commit 0ded89a78a
+64 -25
View File
@@ -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 <<EOF
One or more specified arguments is not recognized.
Recognized stages:
$(printf ' %s\n' "${stages[@]}")
Other recognized arguments:
$(printf ' %s\n' "${other_commands[@]}")
View documentation by entering the following command:
$(would_you_like_to_know_less)
EOF
exit
fi
done
check_gnu_coreutils_prefix
set_variables
check_dependencies
for argument in "$@"; do ${argument}; done
for argument; do "${argument}"; done