wiki.bash-hackers.org/commands/builtin/exec.md
2023-04-15 23:53:05 +12:00

2.2 KiB

====== 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 ====

^Option^Description^ |''-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(r) 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(r) does not specify any options for ''exec'' (like ''-c'', ''-l'', ''-a NAME'').

===== See also =====