# Running exec with a Bash built-in

bashcommand lineshell

I defined a shell function (let's call it clock), which I want to use as a wrapper to another command, similar to the time function, e.g. clock ls -R.

My shell function performs some tasks and then ends with exec "$@". I'd like this function to work even with shell built-ins, e. g. clock time ls -R should output the result of the time built-in, and not the /usr/bin/time executable. But exec always ends up running the command instead. How can I make my Bash function work as a wrapper that also accepts shell built-ins as arguments? Edit: I just learned that time is not a Bash built-in, but a special reserved word related to pipelines. I'm still interested in a solution for built-ins even if it does not work with time, but a more general solution would be even better. #### Best Answer • You defined a bash function. So you are already in a bash shell when invoking that function. So that function could then simply look like: clock(){ echo "do something"$@
}


That function can be invoked with bash builtins, special reserved words, commands, other defined functions:

An alias:

$clock type ls do something ls is aliased to ls --color=auto'  A bash builtin: $ clock type type
do something
type is a shell builtin


Another function:

$clock clock do something do something  An executable: $ clock date
do something
Tue Apr 21 14:11:59 CEST 2015
`