rbash-reload() { _RBASH_LOADED= _RBASH_MERGE_START=1 mkdir -p "$RBASH_CACHE_DIR" rm -f "$RBASH_MERGED" : > "$RBASH_MERGED" || { echo "rbash: failed to write merged cache: $RBASH_MERGED" >&2 _RBASH_MERGE_START= return 1 } # shellcheck source=/dev/null source "$RBASH_CONFIG" _RBASH_MERGE_START= _RBASH_LOADED=1 } __rbash_autoload() { if [ -n "${_RBASH_LOADED:-}" ]; then return 0 fi if [ -f "$RBASH_MERGED" ]; then # shellcheck source=/dev/null source "$RBASH_MERGED" && { _RBASH_LOADED=1 return 0 } echo "rbash: merged cache failed, rebuilding" >&2 rm -f "$RBASH_MERGED" fi rbash-reload } rbash_load() { local rel="$1" local url file # Normal startup should not individually fetch sources. # It should source RBASH_MERGED via __rbash_autoload. if [ -z "${_RBASH_MERGE_START:-}" ]; then __rbash_autoload return 0 fi echo "Load: $rel" url="$(rbash_url "$rel")" file="$(rbash_cache "$url")" || { echo " ..download failed" >&2 return 1 } # shellcheck source=/dev/null if source "$file"; then { printf 'echo "Load: %s"\n' "$rel" cat "$file" printf '\n' } >> "$RBASH_MERGED" else echo " ..failed" >&2 printf 'echo "Skipped: %s. Use rbash-reload to try again."\n' "$rel" >> "$RBASH_MERGED" fi chmod 700 "$RBASH_MERGED" } rbash-run() { local rel="$1" local file shift || true echo "Getting: $rel" file="$(rbash_cache "$(rbash_url "$rel")")" || return 1 "$file" "$@" }