From 75d2c93e89902934ff5f7c6a7a421b2488e760fa Mon Sep 17 00:00:00 2001 From: Brooke Kuhlmann Date: Sat, 24 Feb 2024 14:04:55 -0700 Subject: [PATCH] Refactored library functions Minor cleanup to documentation, syntax, and consistency in general. Milestone: patch --- lib/installers.sh | 191 ++++++++++++++++++++++++++++------------------ lib/options.sh | 6 +- lib/utilities.sh | 65 +++++++++------- lib/verifiers.sh | 117 ++++++++++++++++------------ 4 files changed, 229 insertions(+), 150 deletions(-) diff --git a/lib/installers.sh b/lib/installers.sh index 1d964eb..5a28bdc 100644 --- a/lib/installers.sh +++ b/lib/installers.sh @@ -2,8 +2,9 @@ # Defines software installer functions. -# Downloads remote file to local disk. -# Parameters: $1 (required) - URL, $2 (required) - File name, $3 (optional) - HTTP header. +# Label: Download File +# Description: Download remote file to local disk. +# Parameters: $1 (required): URL, $2 (required): File name, $3 (optional): HTTP header. download_file() { local url="$1" local file_name="$2" @@ -24,38 +25,47 @@ download_file() { } export -f download_file -# Installs an application. -# Parameters: $1 (required) - Application source path, $2 (required) - Application name. +# Label: Install Application +# Description: Install an application. +# Parameters: $1 (required): Install path, $2 (required): Name. install_app() { - local install_root=$(get_install_root "$2") - local file_extension=$(get_extension "$2") + local install_path="$1" + local name="$2" + local install_root="" + local file_extension="" - printf "Installing: $install_root/$2...\n" + install_root=$(get_install_root "$name") + file_extension=$(get_extension "$name") + + printf "%s\n" "Installing: $install_root/$name..." case $file_extension in '') - cp -a "$1/$2" "$install_root";; + cp -a "$install_path/$name" "$install_root";; 'app') - cp -a "$1/$2" "$install_root";; + cp -a "$install_path/$name" "$install_root";; 'prefPane') - sudo cp -pR "$1/$2" "$install_root";; + sudo cp -pR "$install_path/$name" "$install_root";; 'qlgenerator') - sudo cp -pR "$1/$2" "$install_root" && qlmanage -r;; + sudo cp -pR "$install_path/$name" "$install_root" && qlmanage -r;; *) - printf "ERROR: Unknown file extension: $file_extension.\n" + printf "%s\n" "ERROR: Unknown file extension: $file_extension." esac } export -f install_app -# Installs an application via a DMG file. -# Parameters: $1 (required) - URL, $2 (required) - Mount path, $3 (required) - Application name. +# Label: Install DMG Application +# Description: Install DMG application. +# Parameters: $1 (required): URL, $2 (required): Mount path, $3 (required): Application name. install_dmg_app() { local url="$1" local mount_point="/Volumes/$2" local app_name="$3" - local install_path=$(get_install_path "$app_name") + local install_path="" local work_file="download.dmg" + install_path=$(get_install_path "$app_name") + if [[ ! -e "$install_path" ]]; then download_file "$url" "$work_file" mount_image "$MAC_OS_WORK_PATH/$work_file" @@ -66,66 +76,76 @@ install_dmg_app() { } export -f install_dmg_app -# Installs a package via a DMG file. -# Parameters: $1 (required) - URL, $2 (required) - Mount path, $3 (required) - Application name. +# Label: Install DMG Package +# Description: Install DMG application via a package file. +# Parameters: $1 (required): URL, $2 (required): Mount path, $3 (required): Application name. install_dmg_pkg() { local url="$1" local mount_point="/Volumes/$2" local app_name="$3" - local install_path=$(get_install_path "$app_name") + local install_path="" local work_file="download.dmg" + install_path=$(get_install_path "$app_name") + if [[ ! -e "$install_path" ]]; then download_file "$url" "$work_file" mount_image "$MAC_OS_WORK_PATH/$work_file" install_pkg "$mount_point" "$app_name" unmount_image "$mount_point" - printf "Installed: $app_name.\n" + printf "%s\n" "Installed: $app_name." verify_application "$app_name" fi } export -f install_dmg_pkg -# Installs a single file. -# Parameters: $1 (required) - URL, $2 (required) - Install path. +# Label: Install File +# Description: Install a single file. +# Parameters: $1 (required): URL, $2 (required): Install path. install_file() { local file_url="$1" - local file_name=$(get_basename "$1") + local file_name="" local install_path="$2" + file_name=$(get_basename "$1") + if [[ ! -e "$install_path" ]]; then download_file "$file_url" "$file_name" mkdir -p $(dirname "$install_path") mv "$MAC_OS_WORK_PATH/$file_name" "$install_path" - printf "Installed: $file_name.\n" + printf "%s\n" "Installed: $file_name." verify_path "$install_path" fi } export -f install_file -# Installs application code from a Git repository. -# Parameters: $1 (required) - Repository URL, $2 (required) - Install path, $3 (optional) - Git clone options. +# Label: Install Git Application +# Description: Install application from a Git repository. +# Parameters: $1 (required): URL, $2 (required): Install path, $3 (optional): Git clone options. install_git_app() { - local repository_url="$1" - local app_name=$(get_basename "$2") + local url="$1" local install_path="$2" + local app_name="" local options="--quiet" + app_name="$(get_basename "$2")" + if [[ -n "$3" ]]; then local options="$options $3" fi if [[ ! -e "$install_path" ]]; then - printf "Installing: $install_path/$app_name...\n" - git clone $options "$repository_url" "$install_path" - printf "Installed: $app_name.\n" + printf "%s\n" "Installing: $install_path..." + git clone $options "$url" "$install_path" + printf "%s\n" "Installed: $app_name." verify_path "$install_path" fi } export -f install_git_app -# Installs settings from a Git repository. -# Parameters: $1 (required) - Repository URL, $2 (required) - Repository version, $3 (required) - Project directory, $4 (required) - Script to run (including any arguments). +# Label: Install Git Project +# Description: Install Git project. +# Parameters: $1 (required): URL, $2 (required): Version, $3 (required): Project directory, $4 (required): Script to run (including any arguments). install_git_project() { local repo_url="$1" local repo_version="$2" @@ -142,64 +162,76 @@ install_git_project() { } export -f install_git_project -# Installs Homebrew. -# Parameters: None. +# Label: Install Homebrew +# Description: Install and setup Homebrew. install_homebrew() { if ! command -v brew > /dev/null; then /bin/bash -c "$(curl --location --fail --silent --show-error https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - echo "eval \"($(get_homebrew_bin_root)/brew shellenv)\"" > $HOME/.zprofile + echo "eval \"($(get_homebrew_bin_root)/brew shellenv)\"" > "$HOME/.zprofile" eval "$($(get_homebrew_bin_root)/brew shellenv)" fi } export -f install_homebrew -# Installs a package via a zip file. -# Parameters: $1 (required) - URL, $2 (required) - Application name. +# Label: Install Bare Package +# Description: Install a bare package. +# Parameters: $1 (required): URL, $2 (required): Application name. install_bare_pkg() { local url="$1" local app_name="$2" - local install_path=$(get_install_path "$app_name") + local install_path="" local work_file="$app_name.pkg" + install_path=$(get_install_path "$app_name") + if [[ ! -e "$install_path" ]]; then download_file "$url" "$work_file" install_pkg "$MAC_OS_WORK_PATH" "$app_name" - printf "Installed: $app_name.\n" + printf "%s\n" "Installed: $app_name." verify_application "$app_name" fi } export -f install_bare_pkg -# Installs a package. -# Parameters: $1 (required) - Package source path, $2 (required) - Application name. +# Label: Install Package +# Description: Install local package. +# Parameters: $1 (required): Package source path, $2 (required): Application name. install_pkg() { - local install_root=$(get_install_root "$2") + local source_path="$1" + local name="$2" + local install_root="" + local package="" - printf "Installing: $install_root/$2...\n" - local package=$(sudo find "$1" -maxdepth 1 -type f -name "*.pkg" -o -name "*.mpkg") + install_root=$(get_install_root "$name") + package=$(sudo find "$source_path" -maxdepth 1 -type f -name "*.pkg" -o -name "*.mpkg") + + printf "%s\n" "Installing: $install_root/$name..." sudo installer -pkg "$package" -target / } export -f install_pkg -# Installs program (single file). -# Parameters: $1 (required) - URL, $2 (required) - Program name. +# Label: Install Program +# Description: Installs program without any packaging. +# Parameters: $1 (required): URL, $2 (required): Name. install_program() { local url="$1" local program_name="$2" - local install_path=$(get_install_path "$program_name") + local install_path="" + + install_path=$(get_install_path "$program_name") if [[ ! -e "$install_path" ]]; then download_file "$url" "$program_name" mv "$MAC_OS_WORK_PATH/$program_name" "$install_path" chmod 755 "$install_path" - printf "Installed: $program_name.\n" + printf "%s\n" "Installed: $program_name." verify_application "$program_name" fi } export -f install_program -# Installs Node. -# Parameters: None. +# Label: Install Node +# Description: Install and setup Node for local development. install_node() { if [[ ! -x "$(command -v node)" ]]; then "$(get_homebrew_bin_root)/fnm" install --latest @@ -207,10 +239,12 @@ install_node() { } export -f install_node -# Installs Ruby. -# Parameters: None. +# Label: Install Ruby +# Description: Install and setup Ruby for local development. install_ruby() { - local version="$(cat $HOME/.ruby-version | tr -d '\n')" + local version="" + + version="$(cat $HOME/.ruby-version | tr -d '\n')" if [[ ! -x "$(command -v ruby)" && -n $(ruby --version | grep --quiet "$version") ]]; then "$(get_homebrew_bin_root)"/frum install "$version" \ @@ -222,8 +256,8 @@ install_ruby() { } export -f install_ruby -# Installs Rust. -# Parameters: None. +# Label: Install Rust +# Description: Install and setup Rust for local development. install_rust() { if ! command -v cargo > /dev/null; then curl --proto "=https" --tlsv1.2 --fail --silent --show-error https://sh.rustup.rs | sh @@ -231,15 +265,18 @@ install_rust() { } export -f install_rust -# Installs an application via a tar file. -# Parameters: $1 (required) - URL, $2 (required) - Application name, $3 (required) - Decompress options. +# Label: Install Tar Application +# Description: Install application from tar file. +# Parameters: $1 (required): URL, $2 (required): Name, $3 (required): Decompress options. install_tar_app() { local url="$1" local app_name="$2" local options="$3" - local install_path=$(get_install_path "$app_name") + local install_path="" local work_file="download.tar" + install_path=$(get_install_path "$app_name") + if [[ ! -e "$install_path" ]]; then download_file "$url" "$work_file" @@ -250,20 +287,23 @@ install_tar_app() { ) install_app "$MAC_OS_WORK_PATH" "$app_name" - printf "Installed: $app_name.\n" + printf "%s\n" "Installed: $app_name." verify_application "$app_name" fi } export -f install_tar_app -# Installs an application via a zip file. -# Parameters: $1 (required) - URL, $2 (required) - Application name. +# Label: Install Zip Application +# Description: Install application from zip file. +# Parameters: $1 (required): URL, $2 (required): Name. install_zip_app() { local url="$1" local app_name="$2" - local install_path=$(get_install_path "$app_name") + local install_path="" local work_file="download.zip" + install_path=$(get_install_path "$app_name") + if [[ ! -e "$install_path" ]]; then download_file "$url" "$work_file" @@ -275,20 +315,23 @@ install_zip_app() { ) install_app "$MAC_OS_WORK_PATH" "$app_name" - printf "Installed: $app_name.\n" + printf "%s\n" "Installed: $app_name." verify_application "$app_name" fi } export -f install_zip_app -# Installs a package via a zip file. -# Parameters: $1 (required) - URL, $2 (required) - Application name. +# Label: Install Zip Package +# Description: Install application from a package within a zip file. +# Parameters: $1 (required): URL, $2 (required): Application name. install_zip_pkg() { local url="$1" local app_name="$2" - local install_path=$(get_install_path "$app_name") + local install_path="" local work_file="download.zip" + install_path=$(get_install_path "$app_name") + if [[ ! -e "$install_path" ]]; then download_file "$url" "$work_file" @@ -299,24 +342,26 @@ install_zip_pkg() { ) install_pkg "$MAC_OS_WORK_PATH" "$app_name" - printf "Installed: $app_name.\n" + printf "%s\n" "Installed: $app_name." verify_application "$app_name" fi } export -f install_zip_pkg -# Mounts a disk image. -# Parameters: $1 (required) - Image path. +# Label: Mount Image +# Description: Mount disk image. +# Parameters: $1 (required): Path. mount_image() { - printf "Mounting image...\n" + printf "%s\n" "Mounting image..." hdiutil attach -quiet -nobrowse -noautoopen "$1" } export -f mount_image -# Unmounts a disk image. -# Parameters: $1 (required) - Mount path. +# Label: Unmount Image +# Description: Unmount disk image. +# Parameters: $1 (required): Path. unmount_image() { - printf "Unmounting image...\n" + printf "%s\n" "Unmounting image..." hdiutil detach -force "$1" } export -f unmount_image diff --git a/lib/options.sh b/lib/options.sh index 1223e29..75bc176 100644 --- a/lib/options.sh +++ b/lib/options.sh @@ -2,8 +2,10 @@ # Defines command line prompt options. -# Process option selection. -# Parameters: $1 (required) - The option to process. + +# Label: Process Option +# Description: Run script based on selection. +# Parameters: $1 (required): The option to process. process_option() { case $1 in 'B') diff --git a/lib/utilities.sh b/lib/utilities.sh index 0c739e0..367d499 100644 --- a/lib/utilities.sh +++ b/lib/utilities.sh @@ -2,11 +2,10 @@ # Defines general utility functions. -# Caffeinate machine. +# Label: Caffeinate Machine +# Description: Keep machine running for a very long time. caffeinate_machine() { - local pid=$(pgrep -x caffeinate) - - if [[ -n "$pid" ]]; then + if [[ -n "$(pgrep -x caffeinate)" ]]; then printf "Machine is already caffeinated!\n" else caffeinate -s -u -d -i -t 3153600000 > /dev/null & @@ -15,35 +14,40 @@ caffeinate_machine() { } export -f caffeinate_machine -# Cleans work path for temporary processing of installs. +# Label: Clean Work Path +# Description: Clean work path of artifacts. clean_work_path() { rm -rf "$MAC_OS_WORK_PATH" } export -f clean_work_path -# Answers the file or directory basename. -# Parameters: $1 (required) - The file path. +# Label: Get Basename +# Description: Answer file or directory basename. +# Parameters: $1 (required): Path. get_basename() { - printf "${1##*/}" # Answers file or directory name. + printf "%s" "${1##*/}" } export -f get_basename -# Answers the file extension. -# Parameters: $1 (required) - The file name. +# Label: Get Extension +# Description: Answer file extension without dot prefix. +# Parameters: $1 (required): Path. get_extension() { - local name=$(get_basename "$1") - local extension="${1##*.}" # Excludes dot. + local name="" + local extension="${1##*.}" + + name=$(get_basename "$1") if [[ "$name" == "$extension" ]]; then printf '' else - printf "$extension" + printf "%s" "$extension" fi } export -f get_extension -# Answers Homebrew root path. -# Parameters: None. +# Label: Get Homebrew Root +# Description: Answer Homebrew root path. get_homebrew_root() { if [[ "$(/usr/bin/arch)" == "arm64" ]]; then printf "%s" "/opt/homebrew" @@ -53,8 +57,8 @@ get_homebrew_root() { } export -f get_homebrew_root -# Answers Homebrew binary root path. -# Parameters: None. +# Label: Get Homebrew Bin Root +# Description: Answer Homebrew binary root path. get_homebrew_bin_root() { if [[ "$(/usr/bin/arch)" == "arm64" ]]; then printf "%s" "/opt/homebrew/bin" @@ -64,17 +68,22 @@ get_homebrew_bin_root() { } export -f get_homebrew_bin_root -# Answers the full install path (including file name) for file name. -# Parameters: $1 (required) - The file name. +# Label: Get Install Path +# Description: Answer full install path (including file name). +# Parameters: $1 (required): Path. get_install_path() { local file_name="$1" - local install_path=$(get_install_root "$file_name") - printf "$install_path/$file_name" + local install_path="" + + install_path=$(get_install_root "$file_name") + + printf "%s" "$install_path/$file_name" } export -f get_install_path -# Answers the root install path for file name. -# Parameters: $1 (required) - The file name. +# Label: Get Install Root +# Description: Answer root install path. +# Parameters: $1 (required): Path. get_install_root() { local file_name="$1" @@ -93,19 +102,19 @@ get_install_root() { } export -f get_install_root -# Checks Mac App Store (mas) CLI has been installed and exits if otherwise. -# Parameters: None. +# Label: Check Mac App Store Install +# Description: Check Mac App Store (mas) CLI has been installed. check_mas_install() { if ! command -v mas > /dev/null; then printf "%s\n" "ERROR: Mac App Store (mas) CLI can't be found." - printf "%s\n" " Please ensure Homebrew and mas (i.e. brew install mas) have been installed." + printf "%s\n" " Please ensure mas (i.e. brew install mas) is installed." exit 1 fi } export -f check_mas_install -# Configures shell for new machines and ensures PATH is properly configured for running scripts. -# Parameters: None. +# Label: Configure Environment +# Description: Configure shell and ensure PATH is properly configured. configure_environment() { if [[ ! -s "$HOME/.bash_profile" ]]; then printf "%s\n" "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" > "$HOME/.bash_profile" diff --git a/lib/verifiers.sh b/lib/verifiers.sh index 0fc3890..26e6a6d 100644 --- a/lib/verifiers.sh +++ b/lib/verifiers.sh @@ -2,57 +2,65 @@ # Defines verification/validation functions. -# Checks for missing App Store applications. +# Label: Verify App Store Applications +# Description: Check for missing App Store applications. verify_app_store_applications() { - printf "\nChecking App Store applications...\n" + local applications="" - local applications="$(mas list)" + printf "\n%s\n" "Checking App Store applications..." + applications="$(mas list)" while read line; do if [[ "$line" == "mas install"* ]]; then - local application=$(printf "$line" | awk '{print $3}') + application=$(printf "$line" | awk '{print $3}') verify_listed_application "$application" "${applications[*]}" fi done < "$MAC_OS_CONFIG_PATH/bin/install_app_store" - printf "App Store check complete.\n" + printf "%s\n" "App Store check complete." } export -f verify_app_store_applications -# Verifies application exists. -# Parameters: $1 (required) - The file name. +# Label: Verify Application +# Description: Verify application exists. +# Parameters: $1 (required): File name. verify_application() { local file_name="$1" - local install_path=$(get_install_path "$file_name") - if [[ ! -e "$install_path" ]]; then - printf " - Missing: $file_name\n" + if [[ ! -e "$(get_install_path "$file_name")" ]]; then + printf "%s\n" " - Missing: $file_name" fi } export -f verify_application -# Checks for missing applications suffixed by "APP_NAME" as defined in settings.sh. +# Label: Verify Applications +# Description: Check for missing applications suffixed by "APP_NAME" as defined in settings. verify_applications() { - printf "\nChecking application software...\n" + local file_names="" + + printf "\n%s\n" "Checking application software..." # Only use environment keys that end with "APP_NAME". - local file_names=$(set | awk -F "=" '{print $1}' | grep ".*APP_NAME") + file_names=$(set | awk -F "=" '{print $1}' | grep ".*APP_NAME") # For each application name, check to see if the application is installed. Otherwise, skip. for name in $file_names; do verify_application "${!name}" done - printf "Application software check complete.\n" + printf "%s\n" "Application software check complete." } export -f verify_applications -# Checks for missing extensions suffixed by "EXTENSION_PATH" as defined in settings.sh. +# Label: Verify Extensions +# Description: Check for missing extensions suffixed by "EXTENSION_PATH" as defined in settings. verify_extensions() { - printf "\nChecking application extensions...\n" + local extensions="" + + printf "\n%s\n" "Checking application extensions..." # Only use environment keys that end with "EXTENSION_PATH". - local extensions=$(set | awk -F "=" '{print $1}' | grep ".*EXTENSION_PATH") + extensions=$(set | awk -F "=" '{print $1}' | grep ".*EXTENSION_PATH") # For each extension, check to see if the extension is installed. Otherwise, skip. for extension in $extensions; do @@ -60,36 +68,42 @@ verify_extensions() { verify_path "${!extension}" done - printf "Application extension check complete.\n" + printf "%s\n" "Application extension check complete." } export -f verify_extensions -# Checks for missing Homebrew casks. +# Label: Verify Homebrew Casks +# Description: Check for missing Homebrew casks. verify_homebrew_casks() { + local applications="" + printf "\nChecking Homebrew casks...\n" - local applications="$(brew list --casks)" + applications="$(brew list --casks)" while read line; do if [[ "$line" == "brew cask install"* ]]; then - local application=$(printf "$line" | awk '{print $4}') + application=$(printf "%s" "$line" | awk '{print $4}') verify_listed_application "$application" "${applications[*]}" fi done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_casks" - printf "Homebrew cask check complete.\n" + printf "%s\n" "Homebrew cask check complete." } export -f verify_homebrew_casks -# Checks for missing Homebrew formulas. +# Label: Verify Homebrew Formulas +# Description: Check for missing Homebrew formulas. verify_homebrew_formulas() { + local applications="" + printf "Checking Homebrew formulas...\n" - local applications="$(brew list --formulae)" + applications="$(brew list --formulae)" while read line; do if [[ "$line" == "brew install"* ]]; then - local application=$(printf "$line" | awk '{print $3}') + application=$(printf "%s" "$line" | awk '{print $3}') # Exception: "gpg" is the binary but is listed as "gnugp". if [[ "$application" == "gpg" ]]; then @@ -100,80 +114,89 @@ verify_homebrew_formulas() { fi done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_formulas" - printf "Homebrew formula check complete.\n" + printf "%s\n" "Homebrew formula check complete." } export -f verify_homebrew_formulas -# Verifies listed application exists. -# Parameters: $1 (required) - The current application, $2 (required) - The application list. +# Label: Verify Listed Application +# Description: Verify listed application exists. +# Parameters: $1 (required): Current application, $2 (required): Application list. verify_listed_application() { local application="$1" local applications="$2" if [[ "${applications[*]}" != *"$application"* ]]; then - printf " - Missing: $application\n" + printf "%s\n" " - Missing: $application" fi } export -f verify_listed_application -# Verifies path exists. -# Parameters: $1 (required) - The path. +# Label: Verify Path +# Description: Verify path exists. +# Parameters: $1 (required): Path. verify_path() { local path="$1" if [[ ! -e "$path" ]]; then - printf " - Missing: $path\n" + printf "%s\n" " - Missing: $path" fi } export -f verify_path -# Checks for missing Node packages. +# Label: Verify Node Packages +# Description: Check for missing Node packages. verify_node_packages() { - printf "\nChecking Node packages...\n" + printf "\n%s\n" "Checking Node packages..." while read line; do if [[ "$line" == "npm "* ]]; then - local package=$(printf "$line" | awk '{print $4}') - local packages=($(npm list --global --depth=0 | grep "$package")) + package=$(printf "$line" | awk '{print $4}') + packages=($(npm list --global --depth=0 | grep "$package")) verify_listed_application "$package" "${packages[*]}" fi done < "$MAC_OS_CONFIG_PATH/bin/install_node_packages" - printf "Node packages check complete.\n" + printf "%s\n" "Node packages check complete." } export -f verify_node_packages -# Checks for missing Ruby gems. +# Label: Verify Ruby Gems +# Description: Check for missing Ruby gems. verify_ruby_gems() { - local gems="$(gem list --no-versions)" + local gems="" - printf "\nChecking Ruby gems...\n" + printf "\n%s\n" "Checking Ruby gems..." + + gems="$(gem list --no-versions)" while read line; do if [[ "$line" == "gem install"* ]]; then - local gem=$(printf "$line" | awk '{print $3}') + gem=$(printf "%s" "$line" | awk '{print $3}') verify_listed_application "$gem" "${gems[*]}" fi done < "$MAC_OS_CONFIG_PATH/bin/install_ruby_gems" - printf "Ruby gems check complete.\n" + printf "%s\n" "Ruby gems check complete." } export -f verify_ruby_gems -# Checks for missing Rust crates. +# Label: Verify Rust Crates +# Description: Check for missing Rust crates. verify_rust_crates() { - printf "\nChecking Rust crates...\n" + local crates="" - local crates="$(ls -A1 $HOME/.cargo/bin)" + printf "\n%s\n" "Checking Rust crates..." + + crates="$(ls -A1 $HOME/.cargo/bin)" while read line; do if [[ "$line" == "cargo install"* ]]; then - local crate=$(printf "$line" | awk '{print $3}') + crate=$(printf "%s" "$line" | awk '{print $3}') verify_listed_application "$crate" "${crates[*]}" fi done < "$MAC_OS_CONFIG_PATH/bin/install_rust_crates" - printf "Rust crates check complete.\n" + printf "%s\n" "Rust crates check complete." } export -f verify_rust_crates