#! bash # Useful bash functions. This is sourced by the environment file. # These are available to scripts, but you shouldn't use them in scripts if you # want them to be portable. # Usage: pathremove /path/to/bin [PATH] # Eg, to remove ~/bin from $PATH # pathremove ~/bin PATH function pathremove { local IFS=':' local NEWPATH local DIR local PATHVARIABLE=${2:-PATH} for DIR in ${!PATHVARIABLE} ; do if [ "${DIR}" != "${1}" ] ; then NEWPATH="${NEWPATH:+${NEWPATH}:}${DIR}" fi done export ${PATHVARIABLE}="${NEWPATH}" } # Usage: pathprepend /path/to/bin [PATH] # Eg, to prepend ~/bin to $PATH # pathprepend ~/bin PATH function pathprepend { pathremove "${1}" "${2}" [ -d "${1}" ] || return local PATHVARIABLE="${2:-PATH}" export ${PATHVARIABLE}="${1}${!PATHVARIABLE:+:${!PATHVARIABLE}}" } # Usage: pathappend /path/to/bin [PATH] # Eg, to append ~/bin to $PATH # pathappend ~/bin PATH function pathappend { pathremove "${1}" "${2}" [ -d "${1}" ] || return local PATHVARIABLE=${2:-PATH} export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}${1}" } # Usage: ssource /path/to/shellscript # Checks if the file exists before sourcing it function ssource { [ -r "${1}" ] && source "${1}" } # Sets colours to be appropriate for a light on dark terminal function darkterm { DARK=1 source "${HOME}/.bash/colors" } # Sets the colours to be appropriate for a dark on light terminal function lightterm { DARK=0 source "${HOME}/.bash/colors" } # Usage: mcd somedir # Creates the directory if it doesn't exist, and changes into it function mcd { mkdir -p "${1}" && cd "${1}" } # Usage: vimf somefile # Does a recursive search of the current directory for somefile, then edits it function vimf { find . -name "${1}" -exec vim '{}' + } # Sets the nice and ionice priorities for the current shell to the lowest values function slowshell { ionice -c 3 -p $$ renice -n 19 -p $$ } # Usage: is_function something # Check if a function exists function is_function { declare -Ff "$1" > /dev/null } # Load local functions ssource "${HOME}/.bash/functions_local"