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. entr
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:
- Execute /usr/bin/clear before
invoking the utility specified on the
- 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.
- Postpone the first execution of the
utility until a file is modified.
- Reload a persistent child process.
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.
- Evaluate the first argument using the interpreter specified
SHELL environment variable. When
this flag is set, the name of the shell and exit code is printed after
The first argument named /_
is replaced with
the absolute path of the file leading a file system event. If the restart
option is used the first file under watch is treated as the default.
to prevent interactive utilities from
waiting for keyboard input if output does not fit on the screen.
utility exits with one of the following
SIGTERM was received
- No regular files were provided as input or an error
- A file was added to a directory and the directory watch
option was specified
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 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;