trying to reduce syntactic nose by switching "printf" to "echo -e"

not sure I like it
This commit is contained in:
Jack
2020-05-06 13:39:28 +03:00
parent ad25c5c155
commit 9c46566b6c
+32 -29
View File
@@ -2,7 +2,7 @@
# Push-button installer of macOS on VirtualBox # Push-button installer of macOS on VirtualBox
# (c) myspaghetti, licensed under GPL2.0 or higher # (c) myspaghetti, licensed under GPL2.0 or higher
# url: https://github.com/myspaghetti/macos-guest-virtualbox # url: https://github.com/myspaghetti/macos-guest-virtualbox
# version 0.90.6 # version 0.90.7
# Dependencies: bash coreutils gzip unzip wget xxd dmg2img # Dependencies: bash coreutils gzip unzip wget xxd dmg2img
# Supported versions: # Supported versions:
@@ -59,24 +59,24 @@ SYSTEM_INTEGRITY_PROTECTION='10' # '10' - enabled, '77' - disabled
# welcome message # welcome message
function welcome() { function welcome() {
printf ' echo -ne "
'"${highlight_color}"'Push-button installer of macOS on VirtualBox'"${default_color}"' ${highlight_color}Push-button installer of macOS on VirtualBox${default_color}
This script installs only open-source software and unmodified Apple binaries, This script installs only open-source software and unmodified Apple binaries,
and requires about '"${highlight_color}"'40GB'"${default_color}"' of available storage, of which 20GB are for temporary and requires about ${highlight_color}40GB${default_color} of available storage, of which 20GB are for temporary
installation files that may be deleted when the script is finished. installation files that may be deleted when the script is finished.
The script interacts with the virtual machine twice, '"${highlight_color}"'please do not interact'"${default_color}"' The script interacts with the virtual machine twice, ${highlight_color}please do not interact${default_color}
'"${highlight_color}"'with the virtual machine manually'"${default_color}"' before the script is finished. ${highlight_color}with the virtual machine manually${default_color} before the script is finished.
Documentation about optional configuration, '"${highlight_color}"'iCloud and iMessage connectivity'"${default_color}"', Documentation about optional configuration, ${highlight_color}iCloud and iMessage connectivity${default_color},
resuming the script by stages, and other topics can be viewed with the resuming the script by stages, and other topics can be viewed with the
following command: following command:
' "
would_you_like_to_know_less would_you_like_to_know_less
printf ' echo -ne "
'"${highlight_color}"'Press enter to review the script configuration.'"${default_color}" ${highlight_color}Press enter to review the script configuration.${default_color}"
clear_input_buffer_then_read clear_input_buffer_then_read
function pad_to_33_chars() { function pad_to_33_chars() {
@@ -186,20 +186,20 @@ if [[ -n "$(sw_vers 2>/dev/null)" ]]; then
fi fi
# if csplit isn't GNU variant, exit # if csplit isn't GNU variant, exit
if [[ -z "$(csplit --help 2>/dev/null)" ]]; then if [[ -z "$(csplit --help 2>/dev/null)" ]]; then
printf $'\n''macOS detected.'$'\n''Please use a package manager such as '"${highlight_color}"'homebrew'"${default_color}"', '"${highlight_color}"'pkgsrc'"${default_color}"', '"${highlight_color}"'nix'"${default_color}"', or '"${highlight_color}"'MacPorts'"${default_color}"'.'$'\n' echo -e "\nmacOS detected.\nPlease use a package manager such as ${highlight_color}homebrew${default_color}, ${highlight_color}pkgsrc${default_color}, ${highlight_color}nix${default_color}, or ${highlight_color}MacPorts${default_color}"
echo "Please make sure the following packages are installed and that" echo "Please make sure the following packages are installed and that"
echo "their path is in the PATH variable:" echo "their path is in the PATH variable:"
printf "${highlight_color}"'bash coreutils dmg2img gzip unzip wget xxd'"${default_color}"$'\n' echo -e "${highlight_color}bash coreutils dmg2img gzip unzip wget xxd${default_color}"
echo "Please make sure Bash and coreutils are the GNU variant." echo "Please make sure Bash and coreutils are the GNU variant."
exit exit
fi fi
fi fi
# check for xxd, gzip, unzip, coreutils, wget # check for xxd, gzip, unzip, coreutils, wget
if [[ -z "$(echo "xxd" | xxd -p 2>/dev/null)" || \ if [[ -z "$(echo "xxd" | xxd -p 2>/dev/null)" ||
-z "$(gzip --help 2>/dev/null)" || \ -z "$(gzip --help 2>/dev/null)" ||
-z "$(unzip -hh 2>/dev/null)" || \ -z "$(unzip -hh 2>/dev/null)" ||
-z "$(csplit --help 2>/dev/null)" || \ -z "$(csplit --help 2>/dev/null)" ||
-z "$(wget --version 2>/dev/null)" ]]; then -z "$(wget --version 2>/dev/null)" ]]; then
echo "Please make sure the following packages are installed:" echo "Please make sure the following packages are installed:"
echo "coreutils gzip unzip xxd wget" echo "coreutils gzip unzip xxd wget"
@@ -235,7 +235,7 @@ if [[ -n "$(cygcheck -V 2>/dev/null)" ]]; then
echo "Please make sure VirtualBox version 6.0 or higher is installed, and that" echo "Please make sure VirtualBox version 6.0 or higher is installed, and that"
echo "the path to the VBoxManage.exe executable is in the PATH variable, or assign" echo "the path to the VBoxManage.exe executable is in the PATH variable, or assign"
echo "in the script the full path including the name of the executable to" echo "in the script the full path including the name of the executable to"
printf 'the variable '"${highlight_color}"'cmd_path_VBoxManage'"${default_color}" echo -e "the variable ${highlight_color}cmd_path_VBoxManage${default_color}"
exit exit
fi fi
fi fi
@@ -306,7 +306,7 @@ fi
# Oracle VM VirtualBox Extension Pack # Oracle VM VirtualBox Extension Pack
extpacks="$(VBoxManage list extpacks 2>/dev/null)" extpacks="$(VBoxManage list extpacks 2>/dev/null)"
if [[ "$(expr match "${extpacks}" '.*Oracle VM VirtualBox Extension Pack')" -le "0" || \ if [[ "$(expr match "${extpacks}" '.*Oracle VM VirtualBox Extension Pack')" -le "0" ||
"$(expr match "${extpacks}" '.*Usable:[[:blank:]]*false')" -gt "0" ]]; then "$(expr match "${extpacks}" '.*Usable:[[:blank:]]*false')" -gt "0" ]]; then
echo "Please make sure Oracle VM VirtualBox Extension Pack is installed, and that" echo "Please make sure Oracle VM VirtualBox Extension Pack is installed, and that"
echo "all installed VirtualBox extensions are listed as usable when" echo "all installed VirtualBox extensions are listed as usable when"
@@ -319,7 +319,7 @@ if [[ -z "$(dmg2img -d 2>/dev/null)" ]]; then
if [[ -z "$(cygcheck -V 2>/dev/null)" ]]; then if [[ -z "$(cygcheck -V 2>/dev/null)" ]]; then
echo "Please install the package dmg2img." echo "Please install the package dmg2img."
exit exit
elif [[ -z "$(${PWD}/dmg2img -d 2>/dev/null)" ]]; then elif [[ -z "$("${PWD}/dmg2img.exe" -d 2>/dev/null)" ]]; then
echo "Locally installing dmg2img" echo "Locally installing dmg2img"
wget "http://vu1tur.eu.org/tools/dmg2img-1.6.6-win32.zip" \ wget "http://vu1tur.eu.org/tools/dmg2img-1.6.6-win32.zip" \
${wgetargs} \ ${wgetargs} \
@@ -525,13 +525,16 @@ generate_nvram_bin_file MLB "${MLB_b16}" "4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14"
# ROM # ROM
# Convert the mixed-ASCII-and-base16 ROM value # Convert the mixed-ASCII-and-base16 ROM value
# into an ASCII string that represents a base16 number. # into an ASCII string that represents a base16 number.
ROM_b16="$(for (( i=0; i<${#ROM}; )); do let j=i+1; ROM_b16="$(for (( i=0; i<${#ROM}; )); do
if [[ "${ROM:${i}:1}" == "%" ]]; then if [[ "${ROM:${i}:1}" == "%" ]]; then
echo -n "${ROM:${j}:2}"; let i=i+3; let j=i+1
echo -n "${ROM:${j}:2}"
let i=i+3
else else
x="$(echo -n "${ROM:${i}:1}" | od -t x1 -An | tr -d ' ')"; x="$(echo -n "${ROM:${i}:1}" | od -t x1 -An | tr -d ' ')"
echo -n "${x}"; let i=i+1; echo -n "${x}"
fi; let i=i+1
fi
done)" done)"
generate_nvram_bin_file ROM "${ROM_b16}" "4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14" generate_nvram_bin_file ROM "${ROM_b16}" "4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14"
@@ -582,7 +585,7 @@ echo $'\n'"Creating VirtualBox 6 virtual ISO containing the"
echo "installation files from swcdn.apple.com"$'\n' echo "installation files from swcdn.apple.com"$'\n'
pseudouuid="$(od -tx -N16 /dev/urandom | xxd -r | xxd -p)" pseudouuid="$(od -tx -N16 /dev/urandom | xxd -r | xxd -p)"
pseudouuid="${pseudouuid:0:8}-${pseudouuid:8:4}-${pseudouuid:12:4}-${pseudouuid:16:4}-${pseudouuid:20:12}" pseudouuid="${pseudouuid:0:8}-${pseudouuid:8:4}-${pseudouuid:12:4}-${pseudouuid:16:4}-${pseudouuid:20:12}"
echo "--iprt-iso-maker-file-marker-bourne-sh "${pseudouuid}" echo "--iprt-iso-maker-file-marker-bourne-sh ${pseudouuid}
--volume-id=${macOS_release_name:0:5}-files" > "${macOS_release_name}_Installation_files.viso" --volume-id=${macOS_release_name:0:5}-files" > "${macOS_release_name}_Installation_files.viso"
# Apple macOS installation files # Apple macOS installation files
@@ -676,7 +679,7 @@ if [[ -w "Install ${macOS_release_name}.vdi" ]]; then
printf "${warning_color}"'Delete "'"Install ${macOS_release_name}.vdi"'"?'"${default_color}" printf "${warning_color}"'Delete "'"Install ${macOS_release_name}.vdi"'"?'"${default_color}"
prompt_delete_y_n prompt_delete_y_n
if [[ "${delete}" == "y" ]]; then if [[ "${delete}" == "y" ]]; then
if [[ "$( VBoxManage list runningvms )" =~ \""${vm_name}"\" ]]; if [[ "$( VBoxManage list runningvms )" =~ \""${vm_name}"\" ]]
then then
echo '"'"Install ${macOS_release_name}.vdi"'" may be deleted' echo '"'"Install ${macOS_release_name}.vdi"'" may be deleted'
echo "only when the virtual machine is powered off." echo "only when the virtual machine is powered off."
@@ -818,7 +821,7 @@ detached from the VM and released from VirtualBox.
print_dimly "If the partitioning fails, exit the script by pressing CTRL-C. print_dimly "If the partitioning fails, exit the script by pressing CTRL-C.
Otherwise, please wait." Otherwise, please wait."
# Detach the original 2GB BaseSystem.vdi # Detach the original 2GB BaseSystem.vdi
while [[ "$( VBoxManage list runningvms )" =~ \""${vm_name}"\" ]]; do sleep 2 >/dev/null 2>&1; done; while [[ "$( VBoxManage list runningvms )" =~ \""${vm_name}"\" ]]; do sleep 2 >/dev/null 2>&1; done
# Release basesystem vdi from VirtualBox configuration # Release basesystem vdi from VirtualBox configuration
VBoxManage storageattach "${vm_name}" --storagectl SATA --port 2 --medium none >/dev/null 2>&1 VBoxManage storageattach "${vm_name}" --storagectl SATA --port 2 --medium none >/dev/null 2>&1
VBoxManage closemedium "${macOS_release_name}_BaseSystem.vdi" >/dev/null 2>&1 VBoxManage closemedium "${macOS_release_name}_BaseSystem.vdi" >/dev/null 2>&1
@@ -917,7 +920,7 @@ printf $'\n'"${highlight_color}"'That'"'"'s it! Enjoy your virtual machine.'"${d
function delete_temporary_files() { function delete_temporary_files() {
print_dimly "stage: delete_temporary_files" print_dimly "stage: delete_temporary_files"
if [[ ! "$(VBoxManage showvminfo "${vm_name}")" =~ State:[\ \t]*powered\ off ]]; if [[ ! "$(VBoxManage showvminfo "${vm_name}")" =~ State:[\ \t]*powered\ off ]]
then then
printf 'Temporary files may be deleted when the virtual machine is powered off printf 'Temporary files may be deleted when the virtual machine is powered off
and without a suspended state by running the following command at the script'"'"'s and without a suspended state by running the following command at the script'"'"'s
@@ -1426,7 +1429,7 @@ stages='
' '
[[ -z "${1}" ]] && for stage in ${stages}; do ${stage}; done && exit [[ -z "${1}" ]] && for stage in ${stages}; do ${stage}; done && exit
check_shell check_shell
[[ "${1}" == "documentation" ]] && documentation && exit [[ "${1}" = "documentation" ]] && documentation && exit
valid_arguments=(${stages//$'[\r\n]'/ } troubleshoot documentation) valid_arguments=(${stages//$'[\r\n]'/ } troubleshoot documentation)
for specified_arg in "$@"; do for specified_arg in "$@"; do
there_is_a_match="" there_is_a_match=""