Bash – How to invoke a shell built-in explicitly

bashshell-builtinshell-script

I want to customize the functionality of cd command as per my needs.

I defined the following function –
function cd () { cd "$@" && pushd "$@"; }

The intent of this function is to automatically push the directory onto the stack so that it saves me the effort to manually type pushd . every time.

However, the above function is an infinitely recursive function, as the call to cd is interpreted to be the function itself and not the cd built-in.

How do I reference the cd built-in in this function?

I know that aliases can be escaped using \. What is the way to escape functions or reference built-ins in a more explicit way?

Note: I do not want to rename my function to anything else.

Best Answer

The command builtin forces a command name to be interpreted as a built-in or external command (skipping alias and function lookup). It is available in all POSIX shells including bash.

cd () { command cd "$@" && pushd "$@"; }

(Note that this example is a bad one: it doesn't work with relative paths, and you might as well just type pushd in the first place.)

In bash and zsh (but not ksh), you can use builtin to force a command name to be interpreted as a builtin, excluding aliases, functions and external commands.