The exec builtin command

Synopsis

exec [-a NAME] [-cl] [COMMAND] [ARG...] [REDIRECTION...]

Description

The exec builtin command is used to

  • replace the shell with a given program (executing it, not as new process)
  • set redirections for the program to execute or for the current shell

If only redirections are given, the redirections affect the current shell without executing any program.

Options

OptionDescription
-a NAME Passes NAME as zeroth argument for the program to be executed
-c Execute the program with an empty (cleared) environment
-l Prepends a dash (-) to the zeroth argument of the program to be executed, similar to what the login program does

Exit status

  • on redirection errors it returns 1, otherwise 0
  • on exec failures:
    • a non-interactive shell terminates; if the shell option execfail is set exec returns failure
    • in an interactive shell, exec returns failure

Examples

Wrapper around a program

myprog=/bin/ls
echo "This is the wrapper script, it will exec $myprog"
 
# do some vodoo here, probably change the arguments etc.
# well, stuff a wrapper is there for
 
exec "$myprog" "$@"

Open a file as input for the script

# open it
exec 3< input.txt
 
# for example: read one line from the file(-descriptor)
read -u 3 LINE
# or
read LINE <&3
 
# finally, close it
exec 3<&-

Overall script logfile

To redirect the whole stdout and stderr of the shell or shellscript to a file, you can use the exec builtin command:

exec >/var/adm/my.log 2>&1
 
# script continues here...

Portability considerations

  • POSIX® specifies error code ranges:
    • if exec can't find the program to execute, the error code shall be 126
    • on a redirection error, the error code shall be between 1 and 125
  • the -a NAME option appeared in Bash 4.2-alpha
  • POSIX® does not specify any options for exec (like -c, -l, -a NAME).

See also

Discussion

Vitaliy, 2012/07/25 09:36

I would add here Bash "diamond" operator for opening files for reading and writing:

exec <>file 
Jan Schampera, 2012/08/12 09:02

Agreed, it should be crosslinked to the redirections section.

I never heard "diamond operator" - nice :-)

Enter your comment. Wiki syntax is allowed:
 
commands/builtin/exec.txt · Last modified: 2011/06/20 21:51 by thebonsai

Fatal error: Out of memory (allocated 35913728) (tried to allocate 45 bytes) in /homepages/41/d13525936/htdocs/bash-hackers-site/wiki/lib/plugins/quickstats/db/php-local-browscap.php on line 15