#!/usr/bin/env bash group=${args[group]:?} file=${args[--file]:-} clean=${args[--clean]:-} _install_entry() { type="$1" source="$2" target="$3" hook="$4" pipe="$5" completions="$6" install_args=() if [[ -n "$hook" ]]; then install_args+=("--hook=$hook") fi if [[ -n "$clean" ]]; then install_args+=("--clean") fi install_args+=("$type") if [[ -n "$pipe" ]]; then install_args+=("--pipe=$pipe") fi if [[ -n "$completions" ]]; then install_args+=("--completions=$completions") fi if [[ $source = \$* ]] then source=$(eval "echo $source") fi install_args+=("$source") install_args+=("$(eval "echo $target")") "$0" "${install_args[@]}" } _handle_entry() { unset AUTOINSTALL_ITEM_TYPE \ AUTOINSTALL_ITEM_SOURCE \ AUTOINSTALL_ITEM_TARGET \ AUTOINSTALL_ITEM_HOOK \ AUTOINSTALL_ITEM_PIPE \ AUTOINSTALL_ITEM_COMPLETIONS \ AUTOINSTALL_ITEM_GROUPS eval "$1" # check if we have the required vars if [[ -z "${AUTOINSTALL_ITEM_TYPE:-}" \ || -z "${AUTOINSTALL_ITEM_SOURCE:-}" \ || -z "${AUTOINSTALL_ITEM_TARGET:-}" \ || -z "${AUTOINSTALL_ITEM_GROUPS:-}" ]] then return fi if [[ "$group" != "all" ]] then # check if group is in groups if [[ ! "${AUTOINSTALL_ITEM_GROUPS}" =~ (^|,)$group(,|$) ]] then return fi fi _install_entry "$AUTOINSTALL_ITEM_TYPE" "$AUTOINSTALL_ITEM_SOURCE" \ "$AUTOINSTALL_ITEM_TARGET" "${AUTOINSTALL_ITEM_HOOK:-}" "${AUTOINSTALL_ITEM_PIPE:-}" "${AUTOINSTALL_ITEM_COMPLETIONS:-}" } file_lines=$(wc -l < "$file") line=0 while [[ $line -lt $file_lines ]]; do entry=$(tail -n +$line "$file" | awk '/^$/{exit} {print} ') entry_len=$(echo "$entry" | wc -l) line=$((line + entry_len)) if [[ $entry_len -le 1 ]]; then continue fi _handle_entry "$entry" || true # ignore errors done