40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
# 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_
 | 
						|
}
 |