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