man bash dice:
exec [-cl] [-a name] [command [arguments]]
If command is specified, it replaces the shell. No new process
is created. The arguments become the arguments to command. If
the -l option is supplied, the shell places a dash at the
beginning of the zeroth argument passed to command. This is
what login(1) does. The -c option causes command to be executed
with an empty environment. If -a is supplied, the shell passes
name as the zeroth argument to the executed command. If command
cannot be executed for some reason, a non-interactive shell
exits, unless the execfail shell option is enabled. In that
case, it returns failure. An interactive shell returns failure
if the file cannot be executed. If command is not specified,
any redirections take effect in the current shell, and the
return status is 0. If there is a redirection error, the return
status is 1.
Las dos últimas líneas son lo importante: si se ejecuta execsolo, sin un comando, simplemente hará que las redirecciones se apliquen al shell actual. Probablemente sepa que cuando ejecuta command > file, la salida de commandse escribe en filelugar de en su terminal (esto se llama redirección ). Si ejecuta en su exec > filelugar, la redirección se aplica a todo el shell: cualquier salida producida por el shell se escribe en filelugar de a su terminal. Por ejemplo aqui
bash-3.2$ bash
bash-3.2$ exec > file
bash-3.2$ date
bash-3.2$ exit
bash-3.2$ cat file
Thu 18 Sep 2014 23:56:25 CEST
Primero comienzo un nuevo bashshell. Luego, en este nuevo shell ejecuto exec > file, de modo que toda la salida se redirige a file. De hecho, después de eso ejecuto datepero no obtengo salida, porque la salida se redirige a file. Luego salgo de mi shell (para que la redirección ya no se aplique) y veo que de filehecho contiene el resultado del datecomando que ejecuté anteriormente.