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命令行工具

Download history 2355/week @ 2024-05-04 2291/week @ 2024-05-11 2717/week @ 2024-05-18 2520/week @ 2024-05-25 3196/week @ 2024-06-01 5219/week @ 2024-06-08 5011/week @ 2024-06-15 4402/week @ 2024-06-22 3921/week @ 2024-06-29 3016/week @ 2024-07-06 2998/week @ 2024-07-13 2930/week @ 2024-07-20 3256/week @ 2024-07-27 2624/week @ 2024-08-03 2986/week @ 2024-08-10 2415/week @ 2024-08-17

11,815 每月下载量
mtgadmin 中使用

Apache-2.0

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

libsrc中的任何文件发生变化时运行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