Commit 6dad27d4 by Eric Coissac

Add a new module to manage file path

parent 6e649f5a
......@@ -129,7 +129,7 @@ You can erase an existing file by a redirection
Returns the noclobber status as a string
- `on`: the noclobber mode is on
- `off`: the noclobber mode is off
- `off`: the noclobber mode is off
```{shell}
> include clobber
......@@ -376,7 +376,6 @@ If the file does not exist it is created
Closes the current logfile and redirect the logging to stderr.
----------------------------------------------------------
......@@ -486,7 +485,6 @@ Closes the current logfile and redirect the logging to stderr.
setintersec <SETNAME1> <SETNAME2> <DESTINATION>
```
----------------------------------------------------------
......@@ -576,7 +574,6 @@ and the return status is set to *1* instead of *0* usually.
tempdirectory <VARIABLE> [MINSIZE]
```
----------------------------------------------------------
......@@ -598,6 +595,26 @@ and the return status is set to *1* instead of *0* usually.
```
----------------------------------------------------------
## path
### Activating the module
> source $LECABASHHOME/utils.sh
> include path
### Functions provided:
#### relative2absolute
relative2absolute <PATH>
#### absolute2relative
```bash
absolute2relative <PATH> <RELATIVE_TO>
```
----------------------------------------------------------
## irods
......@@ -642,7 +659,6 @@ ex:
fi
```
----------------------------------------------------------
......
# LECA Bash library
#
# The LECA bash library provides a set of function used for helping
# development of bash script mainly to write job script on the luke
# cluster
#
# The files from the LECA Bash library must be sourced from your main script
#
#
include logging
logdebug "Load path package"
relative2absolute(){
local thePath
if [[ ! "$1" =~ ^/ ]];then
thePath="$PWD/$1"
else
thePath="$1"
fi
echo "$thePath"|(
IFS=/
read -a parr
declare -a outp
for i in "${parr[@]}";do
case "$i" in
''|.) continue ;;
..)
len=${#outp[@]}
if ((len==0));then
continue
else
unset outp[$((len-1))]
fi
;;
*)
len=${#outp[@]}
outp[$len]="$i"
;;
esac
done
echo /"${outp[*]}"
)
}
function absolute2relative() {
# both $1 and $2 are absolute paths beginning with /
# returns relative path to $2/$target from $1/$source
source=$1
target=$2
common_part=$source # for now
result="" # for now
while [[ "${target#$common_part}" == "${target}" ]]; do
# no match, means that candidate common part is not correct
# go up one level (reduce common part)
common_part="$(dirname $common_part)"
# and record that we went back, with correct / handling
if [[ -z $result ]]; then
result=".."
else
result="../$result"
fi
done
if [[ $common_part == "/" ]]; then
# special case for root (no common path)
result="$result/"
fi
# since we now have identified the common part,
# compute the non-common part
forward_part="${target#$common_part}"
# and now stick all parts together
if [[ -n $result ]] && [[ -n $forward_part ]]; then
result="$result$forward_part"
elif [[ -n $forward_part ]]; then
# extra slash removal
result="${forward_part:1}"
fi
echo $result
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment