Exec

The exec builtin calls the underlying exec(3) system call. It has two main purposes. The first is the way in which the system call is most commonly used — to replace the currently running process with a different process. That is, the shell itself will be replaced by a different program, be it another shell, or any other program. When the exec’d program terminates, control is not returned to the calling shell. The second use is to cause redirection to happen as a byproduct of the exec call.

Using exec to Replace the Existing Program

A typical login session is shown in the following example, when the user logs in to node2 from node1. The hostnames are reflected in the shell prompts, and the % prompt reflects a csh session, while the $ prompt reflects a bash session.

THE USER LOGS IN TO NODE2 FROM NODE1, AND IS GREETED WITH A CSH PROMPT.

steve@node1:~$ ssh node2
steve@node2's password:
You have new mail.
Last login: Mon Jan 17 15:19:53 2011
steve@node2%

PREFERRING BASH, THE USER THEN CALLS BASH FROM THE CSH PROMPT.

steve@node2% bash

THE USER THEN DOES WHATEVER IS WANTED IN THE BASH SHELL.

steve@node2:~$ # do stuff in bash
steve@node2:~$ echo $SHELL
/bin/bash

ON COMPLETING THE TASKS, THE USER EXITS THE SHELL. INSTEAD OF CLOSING THE CONNECTION, THE USER SIMPLY DROPS BACK TO THE CALLING CSH SESSION; TO CSH, BASH WAS JUST ANOTHER PROGRAM, WHICH RAN AND HAS NOW COMPLETED EXECUTION.

steve@node2:~$ exit
exit
steve@node2%

THE USER EXITS THE CSH SESSION AND FINALLY ...

Get Shell Scripting: Expert Recipes for Linux, Bash, and More now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.