Filewatcher CLI
CLI for Filewatcher.
Installation
Add this line to your application's Gemfile:
gem 'filewatcher-cli'
And then execute:
bundle install
Or install it yourself as:
gem install filewatcher-cli
Usage
Run the echo
command when the file myfile
is changed:
$ filewatcher "myfile" "echo 'myfile has changed'"
Run any JavaScript in the current directory when it is updated in Windows PowerShell:
> filewatcher *.js "node %FILENAME%"
In Linux/macOS:
$ filewatcher *.js 'node $FILENAME'
Place filenames in quotes to use Ruby filename globbing instead of shell filename globbing. This will make Filewatcher look for files in subdirectories too. To watch all JavaScript files in subdirectories in Windows:
> filewatcher "**/*.js" "node %FILENAME%"
In Linux/macOS:
$ filewatcher '**/*.js' 'node $FILENAME'
By default, Filewatcher executes the command only for the first changed file
that found from file system check, but you can using the --every/-E
option
for running the command on each changed file.
$ filewatcher -E * 'echo file: $FILENAME'
Try to run the updated file as a script when it is updated by using the
--exec/-e
option. Works with files with file extensions that looks like a
Python, Ruby, Perl, PHP, JavaScript or AWK script.
$ filewatcher -e *.rb
Print a list of all files matching *.css first and then output the filename
when a file is being updated by using the --list/-l
option:
$ filewatcher -l '**/*.css' 'echo file: $FILENAME'
Watch the "src" and "test" folders recursively, and run test when the file system gets updated:
$ filewatcher "src test" "ruby test/test_suite.rb"
Restart long running commands
The --restart/-r
option kills the command if it's still running when
a file system change happens. Can be used to restart locally running web servers
on updates, or kill long running tests and restart on updates. This option
often makes Filewatcher faster in general. To not wait for tests to finish:
$ filewatcher --restart "**/*.rb" "rake test"
By default, it sends TERM
signal, but you can change it to what you want
via --restart-signal
option:
$ filewatcher --restart --restart-signal=KILL "**/*.rb" "rake test"
Due to problems with signals on Windows,
the default value of restart signal is KILL
on Windows (while on Unix-like is TERM
),
which is a single one supported at the current moment, so use other values carefully.
The --immediate/-I
option starts the command on startup without waiting for file system updates. To start a web server and have it automatically restart when HTML files are updated:
$ filewatcher --restart --immediate "**/*.html" "python -m SimpleHTTPServer"
Daemonizing Filewatcher process
The --daemon/-D
option starts Filewatcher in the background as system daemon, so Filewatcher will not be terminated by Ctrl+C
, for example.
Available environment variables
The environment variable $FILENAME
is available in the shell command argument.
On UNIX like systems the command has to be enclosed in single quotes. To run
node whenever a JavaScript file is updated:
$ filewatcher *.js 'node $FILENAME'
Environment variables available from the command string:
BASENAME File basename.
FILENAME Relative filename.
ABSOLUTE_FILENAME Absolute filename.
RELATIVE_FILENAME Same as FILENAME but starts with "./"
EVENT Event type. Is either 'updated', 'deleted' or 'created'.
DIRNAME Absolute directory name.
Enable plugins
When you use Filewatcher via CLI, you can enable plugins for it via --plugins/-p
option:
# Require `spinner` plugin and then enable a spinner via new option from this plugin
$ filewatcher -p spinner --spinner '**/*'
Development
After checking out the repo, run bundle install
to install dependencies.
Then, run toys rspec
to run the tests.
To install this gem onto your local machine, run toys gem install
.
To release a new version, run toys gem release %version%
.
See how it works here.
Contributing
Bug reports and pull requests are welcome on GitHub.
License
The gem is available as open source under the terms of the MIT License.