From 246d9bac5eb421acfacbedf304e57ffd12b856da Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Fri, 3 Jul 2015 13:03:28 +0100 Subject: [PATCH] Add absolute path helpers --- src/bin/dotify | 1 + src/lib/helpers/absolute-paths.sh | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/lib/helpers/absolute-paths.sh diff --git a/src/bin/dotify b/src/bin/dotify index 041dd3c..a4b2a36 100755 --- a/src/bin/dotify +++ b/src/bin/dotify @@ -31,6 +31,7 @@ shopt -s extglob # Helper functions # +source "../lib/helpers/absolute-paths.sh" source "../lib/helpers/arguments.sh" source "../lib/helpers/trim.sh" diff --git a/src/lib/helpers/absolute-paths.sh b/src/lib/helpers/absolute-paths.sh new file mode 100644 index 0000000..dcb63d9 --- /dev/null +++ b/src/lib/helpers/absolute-paths.sh @@ -0,0 +1,30 @@ +# Get absolute path to directory given file resides in. +# +# Example: +# +# $ cd /tmp/foo-bar +# $ abs_dirname hello/world.txt +# /tmp/foo-bar/hello/world.txt +# +abs_dirname() { + local cwd="$(pwd)" + local path="$1" + + while [ -n "$path" ]; do + cd "${path%/*}" + local name="${path##*/}" + path="$(resolve_link "$name" || true)" + done + + pwd + cd "$cwd" +} + +abs_path() { + local path="$1" + echo "$(cd "$(abs_dirname "$path")" && pwd)/$(basename "$path")" +} + +resolve_link() { + $(type -p greadlink readlink | head -1) $1 +}