Function which overrides bash command

bash

Is it possible to call a bash command which has been overridden with a function? I'd like to make pushd with no arguments alias to pushd . otherwise get normal behaviour.

I've tried

pushd(){
   if [ $# -eq 0 ]; then
      pushd .
   else
      pushd $@
   fi
}

but this seems to give infinite recursion. Normally I'd use the full path to whatever program I'm overriding, but push is a built-in bash thing, so that's not possible.

Best Answer

You should use the builtin command:

pushd(){
   if [ $# -eq 0 ]; then
      builtin pushd .
   else
      builtin pushd "$@"
   fi
}
Related Question