40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # vim:et:ft=sh:sts=2:sw=2 | ||
|  | # | ||
|  | # Copyright 2008 Kate Ward. All Rights Reserved. | ||
|  | # Released under the LGPL (GNU Lesser General Public License). | ||
|  | # | ||
|  | # Author: kate.ward@forestent.com (Kate Ward) | ||
|  | # | ||
|  | # Library of shell functions. | ||
|  | 
 | ||
|  | # Convert a relative path into it's absolute equivalent. | ||
|  | # | ||
|  | # This function will automatically prepend the current working directory if the | ||
|  | # path is not already absolute. It then removes all parent references (../) to | ||
|  | # reconstruct the proper absolute path. | ||
|  | # | ||
|  | # Args: | ||
|  | #   shlib_path_: string: relative path | ||
|  | # Outputs: | ||
|  | #   string: absolute path | ||
|  | shlib_relToAbsPath() | ||
|  | { | ||
|  |   shlib_path_=$1 | ||
|  | 
 | ||
|  |   # prepend current directory to relative paths | ||
|  |   echo "${shlib_path_}" |grep '^/' >/dev/null 2>&1 \ | ||
|  |       || shlib_path_="${PWD}/${shlib_path_}" | ||
|  | 
 | ||
|  |   # clean up the path. if all seds supported true regular expressions, then | ||
|  |   # this is what it would be: | ||
|  |   shlib_old_=${shlib_path_} | ||
|  |   while true; do | ||
|  |     shlib_new_=`echo "${shlib_old_}" |sed 's/[^/]*\/\.\.\/*//;s/\/\.\//\//'` | ||
|  |     [ "${shlib_old_}" = "${shlib_new_}" ] && break | ||
|  |     shlib_old_=${shlib_new_} | ||
|  |   done | ||
|  |   echo "${shlib_new_}" | ||
|  | 
 | ||
|  |   unset shlib_path_ shlib_old_ shlib_new_ | ||
|  | } |