40 个稳定版本
2.1.2 | 2024年6月30日 |
---|---|
1.25.1 | 2024年1月5日 |
1.24.2 | 2023年12月19日 |
1.23.0 | 2023年8月30日 |
1.17.0 | 2021年7月21日 |
#221 在 命令行工具 中
11,815 每月下载量
在 mtgadmin 中使用
330KB
6.5K SLoC
Watchexec CLI
一个简单的独立工具,用于监视路径并在检测到修改时运行命令。
示例用例
- 自动运行单元测试
- 运行代码检查器/语法检查器
功能
-
简单调用和使用
-
在 Linux、Mac、Windows 等操作系统上运行
-
监视当前目录及其所有子目录的更改
- 使用高效的轮询机制(在 Linux、Mac、Windows、BSD 上)
-
将多个文件系统事件合并为一条,以便在保存时使用交换/备份文件的编辑器
-
默认情况下,使用
.gitignore
、.ignore
等文件来决定忽略哪些文件的通知 -
支持监视特定扩展名的文件
-
支持根据 glob 模式 过滤/忽略事件
-
在新的进程组中启动命令(可以通过
--no-process-group
禁用) -
可选地在执行之间清除屏幕
-
可选地在每次修改时重新启动命令(适用于服务器)
-
可选地在命令开始和结束时发送桌面通知
-
无需语言运行时
-
在进程中设置以下环境变量
$WATCHEXEC_COMMON_PATH
设置为以下所有变量的最长公共路径,因此应该在每个路径前添加以获取完整/实际路径。变量名 事件类型 $WATCHEXEC_CREATED_PATH
创建了文件/文件夹 $WATCHEXEC_REMOVED_PATH
删除了文件/文件夹 $WATCHEXEC_RENAMED_PATH
重命名了文件/文件夹 $WATCHEXEC_WRITTEN_PATH
修改了文件/文件夹 $WATCHEXEC_META_CHANGED_PATH
修改了文件/文件夹的元数据 $WATCHEXEC_OTHERWISE_CHANGED_PATH
其他所有类型的事件 这些变量可能包含多个路径:这些路径由平台路径分隔符分隔,就像系统环境变量
PATH
一样。在Unix上是:
,在Windows上是;
。在各个变量内部,路径会被去重并按二进制顺序排序(即既不是Unicode也不是区域感知的)。可以使用
--emit-events=none
禁用此功能,或者使用--emit-events=json-stdio
在标准输入上更改到JSON事件。
反功能特性
- 与任何特定语言或生态系统无关
- 与Git或仓库/项目的存在无关
- 不需要涉及
xargs
的神秘命令行
使用示例
监视当前目录及其所有子目录中的所有JavaScript、CSS和HTML文件的变化,并在检测到变化时运行make
$ watchexec --exts js,css,html make
当此目录/子目录中的任何文件发生变化时,调用make test
,除了target
以下的所有内容
$ watchexec -i "target/**" make test
当此目录/子目录中的任何文件发生变化时,调用ls -la
$ watchexec -- ls -la
当当前目录(及其所有子目录)中的任何Python文件发生变化时,调用/重启python server.py
$ watchexec -e py -r python server.py
当当前目录(及其所有子目录)中的任何文件发生变化时,调用/重启my_server
,并发送SIGKILL
来停止命令
$ watchexec -r --stop-signal SIGKILL my_server
在变化时向命令发送SIGHUP(注意:在这里我们直接执行my_server
,而不是将其包装在shell中)
$ watchexec -n --signal SIGHUP my_server
当任何文件发生变化时运行make
,使用当前目录中的.gitignore
文件进行过滤
$ watchexec make
当lib
或src
中的任何文件发生变化时运行make
$ watchexec -w lib -w src make
当Gemfile
发生变化时运行bundle install
$ watchexec -w Gemfile bundle install
运行两个命令
$ watchexec 'date; make'
当命令开始和结束时获取桌面("toast")通知
$ watchexec -N go build
仅在创建文件时运行
$ watchexec --fs-events create -- s3 sync . s3://my-bucket
如果您来自entr
,请注意,watchexec命令默认在shell中运行。您可以使用-n
或--shell=none
来避免这样做
$ watchexec -n -- echo ';' lorem ipsum
在Windows上,您可能更喜欢使用PowerShell
$ watchexec --shell=pwsh -- Test-Connection example.com
您可以完全避免运行命令,并获取一个事件流以供您自己处理
$ watchexec --emit-events-to=json-stdio --only-emit-events
{"tags":[{"kind":"source","source":"filesystem"},{"kind":"fs","simple":"modify","full":"Modify(Data(Any))"},{"kind":"path","absolute":"/home/code/rust/watchexec/crates/cli/README.md","filetype":"file"}]}
{"tags":[{"kind":"source","source":"filesystem"},{"kind":"fs","simple":"modify","full":"Modify(Data(Any))"},{"kind":"path","absolute":"/home/code/rust/watchexec/crates/lib/Cargo.toml","filetype":"file"}]}
{"tags":[{"kind":"source","source":"filesystem"},{"kind":"fs","simple":"modify","full":"Modify(Data(Any))"},{"kind":"path","absolute":"/home/code/rust/watchexec/crates/cli/src/args.rs","filetype":"file"}]}
打印命令运行所需的时间
$ watchexec --timings -- make
[Running: make]
...
[Command was successful, lasted 52.748081074s]
安装
包管理器
watchexec位于许多包管理器中。有关已知包的完整列表,请参阅[已知包列表](https://github.com/watchexec/watchexec/blob/2c1388e6781b5c35aea448f3a5479ef084680bd0/doc/packages.md),并且可能还有更多!请将您找到的任何内容贡献到列表中 :)
常见包管理器
- Alpine:
$ apk add watchexec
- ArchLinux:
$ pacman -S watchexec
- Nix:
$ nix-shell -p watchexec
- 通过 apt.cli.rs 安装 Debian/Ubuntu:
$ apt install watchexec
- 在 Mac 上通过 Homebrew 安装:
$ brew install watchexec
- 在 Windows 上通过 Chocolatey 安装:
#> choco install watchexec
Binstall
$ cargo binstall watchexec-cli
预编译的二进制文件
请使用 Github 或 网站 上的下载部分获取适合您平台和架构的包,解压它,并将其放置在您的 PATH
中。
还有 Debian/Ubuntu (DEB) 和 Fedora/RedHat (RPM) 的包。
提供了校验和和签名。
Cargo(从源码编译)
只支持最新的 Rust 稳定版本,但旧版本可能也能工作。
$ cargo install watchexec-cli
Shell 完整性
当前可用的 Shell 完整性
- bash: 应将
completions/bash
安装到/usr/share/bash-completion/completions/watchexec
- elvish: 应将
completions/elvish
安装到$XDG_CONFIG_HOME/elvish/completions/
- fish: 应将
completions/fish
安装到/usr/share/fish/vendor_completions.d/watchexec.fish
- nu: 应将
completions/nu
安装到$XDG_CONFIG_HOME/nu/completions/
- powershell: 应将
completions/powershell
安装到$PROFILE/
- zsh: 应将
completions/zsh
安装到/usr/share/zsh/site-functions/_watchexec
如果没有捆绑,您可以使用 watchexec --completions <shell>
为您的 Shell 生成完整性。
手册
手册页位于 doc/watchexec.1
。将其安装到 /usr/share/man/man1/
。如果没有捆绑,您可以使用 watchexec --manual > /path/to/watchexec.1
生成手册页,或者使用 watchexec --manual
在行内查看(需要 man
)。
您还可以 阅读文本版本。
请注意,它是从帮助文本自动生成的,因此不如精心手写的那么美观。
高级构建
这些是可以通过设置功能进行自定义构建的附加选项
PID1
如果您正在使用 Watchexec 作为 PID1(通常在容器或命名空间中),并且它没有按预期工作,您可以创建一个具有 PID1 早期记录的构建:--features pid1-withlog
。
如果您不需要PID1支持,或者您正在做与该程序PID1支持冲突的事情,您可以使用--no-default-features
来禁用它。
Eyra
Eyra是一个构建不依赖于C代码(在libc路径中)的Linux程序的系统。要像这样构建Watchexec,请使用--features eyra
和一个Nightly编译器。
此功能还允许您在程序启动时获取早期日志,使用RUST_LOG=trace
。
依赖项
~29–63MB
~1M SLoC