rbash_sources_list() { printf '%s/%s/raw/master/bash/dist/sources.list\n' \ "$RBASH_REMOTE" "$RBASH_REPO" } declare -gA _RBASH_DICT declare -gA _RBASH_SOURCES_SUM rbash_sources_load() { local hash path item key sources_list _RBASH_DICT=() _RBASH_SOURCES_SUM=() sources_list=$(rbash_cache "$RBASH_SOURCES_SUM" "$(rbash_sources_list)" "sources.list") while read -r hash path; do [ -n "$hash" ] || continue [ -n "$path" ] || continue item="${path#sources/}" key="$(printf '%s' "$item" | grep -o '^[0-9]\+' || true)" [ -n "$key" ] || continue _RBASH_DICT["s$key"]="$item" _RBASH_SOURCES_SUM["s$key"]="$hash" done < "$sources_list" } rbash-list() { local key item enabled_marker rbash_sources_load || return 1 echo "Available sources:" while IFS= read -r key; do item="${_RBASH_DICT[$key]}" enabled_marker=" " if grep -q -F "rbash_load \"sources/$item\"" "$RBASH_CONFIG"; then enabled_marker="*" fi printf ' %s %s\n' "$enabled_marker" "$item" done < <(printf '%s\n' "${!_RBASH_DICT[@]}" | sort -V) } r2ensource() { if [ "$1" = "-f" ]; then sources_list=$(rbash_cache -r "$RBASH_SOURCES_SUM" "$(rbash_sources_list)" "sources.list") fi rbash-list || return 1 local ids id selected tmp local -a enable=() read -r -p "Enter the script id XX, delimited by space: " ids for id in $ids; do selected="${_RBASH_DICT["s$id"]}" if [ -z "$selected" ]; then echo "No such id: $id" >&2 return 1 fi if grep -q -F "rbash_load \"sources/$selected\"" "$RBASH_CONFIG"; then echo "$selected is already enabled." continue fi enable+=("$selected") done tmp="$(mktemp)" cp "$RBASH_CONFIG" "$tmp" for selected in "${enable[@]}"; do echo "rbash_load \"sources/$selected\"" >> "$tmp" echo "Enabling $selected" done sort -u "$tmp" > "$RBASH_CONFIG" rm -f "$tmp" rm -rf "$RBASH_CACHE_DIR" } r2dissource() { local ids id tmp pattern echo "Currently enabled sources:" grep -E '^rbash_load "sources/' "$RBASH_CONFIG" | sed 's/^rbash_load "sources\///; s/"$//' | sed 's/^/ /' read -r -p "Enter the script id XX, delimited by space: " ids tmp="$(mktemp)" cp "$RBASH_CONFIG" "$tmp" for id in $ids; do pattern="rbash_load \"sources/${id}_" if ! grep -q -F "$pattern" "$tmp"; then echo "No such id: $id" >&2 rm -f "$tmp" return 1 fi echo "Disabling $id" grep -v -F "$pattern" "$tmp" > "$tmp.next" mv "$tmp.next" "$tmp" done sort -u "$tmp" > "$RBASH_CONFIG" rm -f "$tmp" rm -rf "$RBASH_CACHE_DIR" }