blob: e37dfa7044a64bf8becf2865c448cf4a69fe824d [file] [log] [blame]
#!/bin/bash
# Universal bash program setup functions.
# Example usage:
# Source files to get required functions.
# source_files="gen_setup.sh"
# source_file_paths=$(type -p ${source_files})
# for file_path in ${source_file_paths} ; do source ${file_path} ; done
# Turn on extended globbing.
shopt -s extglob
function get_pgm_path_info {
local program_path_var="${1:-program_path}" ; shift
local program_name_var="${1:-program_name}" ; shift
local program_dir_path_var="${1:-program_dir_path}" ; shift
local follow_links="${1:-0}" ; shift
# Determine the program path, name and dir path and assign them to the
# variables indicated by the caller.
# Description of argument(s):
# program_path_var The name of the variable to receive the
# program path.
# program_name_var The name of the variable to receive the
# program name.
# program_dir_path_var The name of the variable to receive the
# program dir path.
# follow_links If the program running is actually a link
# to another file, use that file when
# calculating the above values.
local _spn_loc_program_path_="${0}"
# The program name is the program path minus all characters up to and
# including the first slash.
local _spn_loc_program_name_=${_spn_loc_program_path_##*/}
# The program dir path is the program path minus everythin from the last
# slash to the end of the string.
local _spn_loc_program_dir_path_=${_spn_loc_program_path_%${_spn_loc_program_name_}}
# If program dir path does not start with a slash then it is relative.
# Convert it to absolute.
if [ "${_spn_loc_program_dir_path_:0:1}" != "/" ] ; then
_spn_loc_program_dir_path_="$(readlink -f ${_spn_loc_program_dir_path_})/"
# Re-assemble the parts into program path variable.
_spn_loc_program_path_="${_spn_loc_program_dir_path_}${_spn_loc_program_name_}"
fi
if (( follow_links )) ; then
_spn_loc_program_path_=$(readlink -f ${_spn_loc_program_path_})
# Re-calculate program_name in case it is different now.
_spn_loc_program_name_=${_spn_loc_program_path_##*/}
fi
# Set caller's variables.
cmd_buf="${program_path_var}=\"\${_spn_loc_program_path_}\" ; ${program_name_var}=\"\${_spn_loc_program_name_}\" ; ${program_dir_path_var}=\"\${_spn_loc_program_dir_path_}\""
eval "${cmd_buf}"
}