I encounterd the following output while using which

[user@localhost ~]$ which gem
gem ()
    \typeset result;
    ( \typeset rvmrc;
    rvm_rvmrc_files=("/etc/rvmrc" "$HOME/.rvmrc");
    if [[ -n "${rvm_prefix:-}" ]] && ! [[ "$HOME/.rvmrc" -ef "${rvm_prefix}/.rvmrc" ]]; then
    for rvmrc in "${rvm_rvmrc_files[@]}";
        [[ -s "${rvmrc}" ]] && source "${rvmrc}" || true;
    unset rvm_rvmrc_files;
    command gem "$@" ) || result=$?;
    hash -r;
    return ${result:-0}

I have seen which show aliases but not bash scripts before.

This script obviously came from RVM but how did it get in to which and where can I find it on my filesystem? It isn't in .bashrc.

  • Related: unix.stackexchange.com/a/85250/117549 -- quoting: "There is a GNU which which is probably the most extravagant one. It tries to extend what the which csh script did to other shells: you can tell it what your aliases and functions are so that it can give you a better answer (and I believe some Linux distributions set some global aliases around that for bash to do that)."
    – Jeff Schaller
    Jan 31, 2018 at 1:20
  • See also: unix.stackexchange.com/q/322817/117549
    – Jeff Schaller
    Jan 31, 2018 at 1:21
  • 3
    that's not a script, it's a shell function.
    – cas
    Jan 31, 2018 at 5:04

1 Answer 1


Try this:

shopt -s extdebug
declare -F gem

From man builtins:

    If set, behavior intended for use by debuggers is enabled:
    1.     The -F option to the declare builtin displays the source file
           name and line number corresponding to each function name sup‐
           plied as an argument.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .