#!/bin/bash # All the prefixes to consider prefixes=( "$HOME" "$HOME/.local.`uname -m`" "$HOME/.local" "$HOME/.prefix.`uname -m`" "$HOME/.prefix" "$HOME"/.gem/ruby/* ) ###################################################################### in_array() { local needle=$1; shift local haystack=("$@") local straw for straw in "${haystack[@]}"; do [[ "$needle" == "$straw" ]] && return 0 done return 1 } # Import existing values IFS=: paths=($PATH) IFS=: rubylibs=($RUBYLIB) # Scan through prefixes for prefix in "${prefixes[@]}"; do # PATH dir="$prefix/bin" if [[ -d "$dir" ]] && ! in_array "$dir" "${paths[@]}"; then paths=("$dir" "${paths[@]}") fi # RUBYLIB dir="$prefix/lib" if [[ -d "$dir" ]] && ! in_array "$dir" "${rubylibs[@]}"; then rubylibs=("$dir" "${rubylibs[@]}") fi done # Finally, print our values IFS=: PATH="${paths[*]}" IFS=: RUBYLIB="${rubylibs[*]}" # The sed bit here is the only time we call an external program { declare -p PATH declare -p RUBYLIB } | sed 's/^declare \(-\S* \)*//'