#!/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 everything 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}" }