run arbitrary commands when files change
A list of files provided on the standard input and the
is executed using the supplied
arguments if any of them change.
for the child process to finish before responding to subsequent file system
events. A TTY is also opened before entering the watch loop in order to
support interactive utilities.
The arguments are as follows:
- Respond to all events which occur while the
utility is running. Without this option
entr consolidates events in order to
avoid looping. This option has no effect in conjunction with the
- Execute /usr/bin/clear before invoking
the utility specified on the command
- Track the directories of regular files provided as input and exit if a new
file is added. This option also enables directories to be specified
explicitly. Files with names beginning with
.’ are ignored.
- Run in non-interactive mode. In this mode
entr does not attempt to read from the
TTY or change its properties.
- Postpone the first execution of the
utility until a file is modified.
- Reload a persistent child process. As with the standard mode of operation,
a utility which terminates is not
executed again until a file system or keyboard event is processed.
SIGTERM is used to terminate the
utility before it is restarted. A process
group is created to prevent shell scripts from masking signals.
entr waits for the
utility to exit to ensure that resources
such as sockets have been closed. Control of the TTY is not transferred
the child process.
- Evaluate the first argument using the interpreter specified by the
SHELL environment variable. When this
flag is set, the name of the shell and exit code is printed after each
The first argument named /_
is replaced with
the absolute path of the first file to trigger an event. If the restart option
is used the first file under watch is treated as the default.
listens for keyboard input and responds
to the following commands:
- Execute the utility immediately. If the
-r’ option is set this will
terminate and restart the child process as if a file change event had
- Quit; equivalent pressing Ctrl-C.
to prevent interactive utilities
from waiting for keyboard input if output does not fit on the screen.
utility exits with one of the
SIGTERM was received
- No regular files were provided as input or an error occurred
- A file was added to a directory and the directory watch option was
Rebuild a project if source files change, limiting output to the first 20 lines:
$ find src/ | entr -s 'make | head -n
Launch and auto-reload a node.js server:
$ ls *.js | entr -r node
Launch and auto-reload a node.js server as a background task:
$ (ls *.js | entr -r node app.js
Clear the screen and run a query after the SQL script is updated:
$ echo my.sql | entr -p psql -f
Rebuild project if a source file is modified or added to the src/ directory:
$ while true; do ls src/*.rb | entr
-d make; done