-
The script have some hard-coded relative paths. I would like them to be relative to script position.
-
The script needs to change current directory as some other program (cmake) needs it.
-
The script takes some (possibly relative to caller) paths as an argument and it passes them to that program, they should be derelativized.
Questions are inline:
#!/bin/sh
# First arg should be Release or Debug
# TODO test for that.
if test -n "$1"; then # BTW how to test whether $1 is Debug or Release?
BUILD_TYPE="$1"
else
BUILD_TYPE="Release"
fi
# Set install prefix to current directory, unless second argument is given.
if test -n "$2"; then
INSTALL_PREFIX="$2" # How to derelativize this path argument?
else
INSTALL_PREFIX=bin # How to make this path relative to script location?
fi
# Make build directory and do cmake, make, make install.
mkdir -p build/${BUILD_TYPE} && # How to make this path relative to script location?
cd build/${BUILD_TYPE} &&
cmake -D CMAKE_BUILD_TYPE=${BUILD_TYPE} \
-D CMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} \ # Possible relative to caller current directory.
../../ && # Relative to scrip position.
make -j4 &&
make install
Is it a common problem or am I doing something in a non-standard way?
1)
2)
Put
at the top of the script (first non-comment line after
#!line)To make a variable absolute relative to the script:
To make it relative to the starting directory:
Basically we replace a leading slash with empty
"${VAR/#\//}"and compare with"$VAR", if they are different then$VARis absolute. Otherwise we prepend a directory that we want to make it absolute.