Skip to content

Record how a script was invoked

Set path, name, sourced-or-not, and argument variables for the current script.

18th August 2026

get_script_info() {
  local ro=${READONLY_INFO:-false}

  [[ $0 != "${BASH_SOURCE[0]}" ]] && IS_SOURCED=true || IS_SOURCED=false

  READONLY=false
  INVOKED_FILE="${BASH_SOURCE[${#BASH_SOURCE[@]} - 1]}"
  INVOKED_PATH="$(dirname "${BASH_SOURCE[${#BASH_SOURCE[@]} - 1]}")"
  FULL_PATH="$( cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd )"
  FILE_NAME=$(basename "${BASH_SOURCE[0]}")

  if [[ $# -gt 0 ]]; then
    SCRIPT_ARGS=$(printf "'%s', " "${@}")
    SCRIPT_ARGS=${SCRIPT_ARGS::-2}
  else
    SCRIPT_ARGS="None"
  fi

  if [[ "${ro}" = true ]]; then
    readonly IS_SOURCED INVOKED_FILE INVOKED_PATH FULL_PATH FILE_NAME SCRIPT_ARGS
  fi

  export READONLY IS_SOURCED INVOKED_FILE INVOKED_PATH FULL_PATH FILE_NAME SCRIPT_ARGS
}

Caveats

Set READONLY_INFO=true before calling if the exported names should be readonly.