entr man page

entr — run arbitrary commands when files change

Synopsis

entr [-cdprs] utility [argument /_ ...]

Description

A list of files provided on the standard input and the utility is executed using the supplied arguments if any of them change. entr waits 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:

-c

Execute /usr/bin/clear before invoking the utility specified on the command line.

-d

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.

-p

Postpone the first execution of the utility until a file is modified.

-r

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.

-s

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 invocation.

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.

Commands

entr listens for keyboard input and responds to the following commands:

SPACE

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 occurred.

q

Quit; equivalent pressing Ctrl-C.

Environment

If PAGER is undefined, entr will assign /bin/cat to prevent interactive utilities from waiting for keyboard input if output does not fit on the screen.

If SHELL is undefined, entr will use /bin/sh.

Exit Status

The entr utility exits with one of the following values:

0

SIGINT or SIGTERM was received

1

No regular files were provided as input or an error occurred

2

A file was added to a directory and the directory watch option was specified

Examples

Rebuild a project if source files change, limiting output to the first 20 lines:

$ find src/ | entr -s 'make | head -n 20'

Launch and auto-reload a node.js server:

$ ls *.js | entr -r node app.js

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

Info

September 14, 2017