function command_exists { hash "$1" 2>/dev/null 1>/dev/null } function run_if_exists { command_exists "$@" && "$@" } function shell_contains () { local e for e in "${@:2}"; do [[ "$1" == *"$e"* ]] && return 0 done return 1 } function _set_python_command { # See comment in add_to_path about why this is necessary if command_exists pyenv; then _python_command="$(pyenv which python)" else which pyenv _python_command="$(which python)" fi shell_contains "$_python_command" "shim" && \ echo "Warning: setting python command to shim" } function add_to_path { environment_variable_exists _python_command || _set_python_command # We need to get a path to the ACTUAL python command because # pyenv alters PATH before actually executing python, which ends # up changing PATH in a way that is not desireable. eval "$($_python_command $HOME/.lib/python/shell_path.py --include-assignment "$@")" } # Taken from http://www.unix.com/shell-programming-and-scripting/27932-how-know-linux-distribution-i-am-using.html function get_distro { # start with uname and branch the decision from there dist=$(uname -s 2> /dev/null) if [ "$dist" = "Linux" ]; then get_linux_distro && return 0 elif [ -n "$dist" ]; then echo "$dist" return 0 fi proc_version || echo "Unknown" return 1 } function get_linux_distro { if [ -r /etc/lsb-release ]; then dist=$(grep 'DISTRIB_ID' /etc/lsb-release | sed 's/DISTRIB_ID=//' | head -1) [ -n "$dist" ] && echo "$dist" && return 0 fi dist=$(find /etc/ -maxdepth 1 -name '*release' 2> /dev/null | sed 's/\/etc\///' | sed 's/-release//' | head -1) [ -n "$dist" ] && echo "$dist" && return 0 dist=$(find /etc/ -maxdepth 1 -name '*version' 2> /dev/null | sed 's/\/etc\///' | sed 's/-version//' | head -1) [ -n "$dist" ] && echo "$dist" && return 0 return 1 } function is_osx() { case `uname` in 'Darwin') return 0 ;; *) return 1; ;; esac } function environment_variable_exists { eval "value=\"\${$1+x}\"" [ ! -z $value ] } function source_directory_files { for filename in "$1"/*; do environment_variable_exists SHELL_STARTUP_DEBUG && echo "Sourcing $filename" source "$filename" done }