mirror of
https://github.com/asdf-vm/asdf.git
synced 2024-11-15 01:28:17 -07:00
f8d843926a
The mksh shell (and perhaps others too) will not be able to determine a sourced script's path by looking at either `${BASH_SOURCE[0]}` or `$0`. By capturing the value of `$_` as the very first thing the script does, `asdf.sh` can use that as the input for `dirname` in order to determine a value to use for `$ASDF_DIR`. I have tested this change with mksh to confirm that it works, and have also tested it with both bash and zsh to verify that neither of those stop working. This resolves the only compatibility issue I've ran into with asdf, caused by mksh sourcing a script. All subsequent asdf usage involves an asdf executable doing the sourcing, so it's bash to bash at that point.
33 lines
922 B
Bash
33 lines
922 B
Bash
#!/usr/bin/env bash
|
|
|
|
_under="$_"
|
|
if [[ "$_under" == *".sh" ]]; then
|
|
current_script_path="$_under"
|
|
elif [ "${BASH_SOURCE[0]}" != "" ]; then
|
|
current_script_path="${BASH_SOURCE[0]}"
|
|
else
|
|
current_script_path="$0"
|
|
fi
|
|
|
|
export ASDF_DIR
|
|
ASDF_DIR="$(dirname "$current_script_path")"
|
|
# shellcheck disable=SC2016
|
|
[ -d "$ASDF_DIR" ] || echo '$ASDF_DIR is not a directory'
|
|
|
|
# Add asdf to PATH
|
|
#
|
|
# if in $PATH, remove, regardless of if it is in the right place (at the front) or not.
|
|
# replace all occurrences - ${parameter//pattern/string}
|
|
ASDF_BIN="${ASDF_DIR}/bin"
|
|
ASDF_USER_SHIMS="${ASDF_DATA_DIR:-$HOME/.asdf}/shims"
|
|
[[ ":$PATH:" == *":${ASDF_BIN}:"* ]] && PATH="${PATH//$ASDF_BIN:/}"
|
|
[[ ":$PATH:" == *":${ASDF_USER_SHIMS}:"* ]] && PATH="${PATH//$ASDF_USER_SHIMS:/}"
|
|
# add to front of $PATH
|
|
PATH="${ASDF_BIN}:$PATH"
|
|
PATH="${ASDF_USER_SHIMS}:$PATH"
|
|
|
|
if [ -n "$ZSH_VERSION" ]; then
|
|
autoload -U bashcompinit
|
|
bashcompinit
|
|
fi
|