11

I know that this is probably a relatively pointless question, but I am curious as to why exec false closes the terminal just like exit does.

I would also like to know if this is a acceptable way to close the terminal or not.

1

1 Answer 1

12

exec false is replacing the current shell by the execution of the command false (here not the shell builtin but /bin/false or whatever false executable that comes first in the PATH) which quickly exits. If the shell was the topmost process running in your terminal emulator, there are no more processes running inside it so the terminal emulator is closed.

This is a an acceptable alternate way to close a terminal, just like would be many similar commands:

exec true exec sleep 0 exec echo ... 

See also: what-does-an-exec-command-do

2
  • As a side note, bash will perform certain cleanup before invoking exec including writing commands to .bash_history. So if one simply wants to save to .bash_history and launch a new shell in the same terminal window, one can do so by typing exec bash. Commented Mar 12, 2015 at 7:53
  • @jiliagre exec calls commands found in PATH , not built-ins. For instance, exec [[ $USER = root ]] will return bash: exec: [[: not found error. In OP's case, false that is called is /bin/false, and not the shell built-in. Otherwise, good answer, hence +1. As a side note, exec can be sort of a cut-off command, i.e. if those three commands in your example were made into a script, nothing beyond first exec would be reached, because exec would replace shell called by script with whatever command is on the right of exec. Commented Jul 2, 2018 at 6:31

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.