mise watch
- 用法:
mise watch [FLAGS] [TASK] [ARGS]… - 别名:
w - 源代码:
src/cli/watch.rs
运行任务并监视更改以重新运行它
此命令使用 watchexec 工具来监视文件更改并重新运行指定的任务。 要使此命令生效,必须安装它;你可以使用 mise use -g watchexec@latest 来安装。
如需更高级的进程管理(守护进程管理、自动重启、就绪检查、 cron 调度),请参阅 mise 的姊妹项目:https://pitchfork.jdx.dev
参数
[TASK]— 要运行的任务 可以使用:::分隔来指定多个任务 例如:mise run task1 arg1 arg2 ::: task2 arg1 arg2默认为default[ARGS]…— 要运行的任务及参数
标志
--skip-deps— 仅运行指定的任务,跳过所有依赖项-o --on-busy-update <MODE>— 命令运行时收到事件应执行的操作默认值为 'do-nothing',即命令运行时忽略事件,因此由命令产生的更改(如编译输出)会被忽略。你也可以使用 'queue',在命令运行期间发生任何事件时,等当前运行结束后再次运行命令;或者使用 'restart',终止正在运行的命令并启动新命令。最后,还有 'signal',它只发送信号;对于可以在不完全重启的情况下重新加载配置的程序,这可能很有用。
可以使用 '--signal' 选项指定信号。
选项:
queue、do-nothing、restart、signal默认值:
do-nothing-r --restart— 如果进程仍在运行,则重启进程这是 '--on-busy-update=restart' 的简写。
-s --signal <SIGNAL>— 如果进程仍在运行,则向其发送信号指定在进程仍在运行时要发送的信号。这会隐式启用 '--on-busy-update=signal';否则,当该模式为 'restart' 时所使用的信号由 '--stop-signal' 控制。
有关语法,请参阅 '--stop-signal' 的详细文档。
Windows 目前不支持信号,并且始终会将其覆盖为 'kill'。有关 Windows“信号”的更多信息,请参阅 '--stop-signal'。
--stop-signal <SIGNAL>— 发送以停止命令的信号此选项由 '--on-busy-update' 的 'restart' 和 'signal' 模式使用(除非提供了 '--signal')。重启行为是发送信号,等待命令退出;如果经过一段时间后命令仍未退出(参见 '--timeout-stop'),则强制终止它。
unix 上的默认值为 "SIGTERM"。
输入会解析为完整的信号名称(如 "SIGTERM")、简短的信号名称(如 "TERM")或信号编号(如 "15")。所有输入均不区分大小写。
在 Windows 上,此选项在技术上受支持,但只支持 "KILL" 事件,因为 Watchexec 目前还无法传递其他事件。Windows 没有严格意义上的信号;它有终止(此处称为 "KILL" 或 "STOP")以及 "CTRL+C"、"CTRL+BREAK" 和 "CTRL+CLOSE" 事件。为实现可移植性,unix 信号 "SIGKILL"、"SIGINT"、"SIGTERM" 和 "SIGHUP" 分别映射到这些事件。
--stop-timeout <TIMEOUT>— 等待命令正常退出的时间此选项由 '--on-busy-update' 的 'restart' 模式使用。发送正常停止信号后,Watchexec 将等待命令退出。如果命令在这段时间后仍未退出,则会被强制终止。
接受不带单位的秒数值,或类似 "5min 20s" 的时间跨度值。不带单位的值已弃用,并会发出警告;未来将改为错误。
默认值为 10 秒。设置为 0 可立即强制终止命令。
此选项在 Windows 上没有实际效果,因为命令始终会被强制终止;具体原因请参阅 '--stop-signal'。
默认值:
10s--map-signal <SIGNAL:SIGNAL>— 将来自操作系统的信号转换为要发送给命令的信号接受一对以冒号分隔的信号名称,例如 "TERM:INT" 会将 SIGTERM 映射为 SIGINT。第一个信号是 watchexec 收到的信号,第二个信号是发送给命令的信号。可以省略第二个信号以丢弃第一个信号,例如 "TERM:" 表示对 SIGTERM 不执行任何操作。
此选项可以多次指定,以映射多个信号。
对于简短名称(如 "TERM"、"USR2")和完整名称(如 "SIGKILL"、"SIGHUP"),信号语法均不区分大小写。也支持信号编号(如 "15"、"31")。在 Windows 上,接收信号时还支持 "STOP"、"CTRL+C" 和 "CTRL+BREAK" 形式,但 Watchexec 目前无法传递除 STOP 以外的其他“信号”。
-d --debounce <TIMEOUT>— 在采取操作前等待新事件的时间收到事件后,Watchexec 最多会等待这段时间,然后再处理事件(例如运行命令)。这是必需的,因为你认为的单次更改实际上可能会产生许多事件;如果没有此行为,Watchexec 的运行频率会过高。此外,文件写入并不总是原子的,每次写入都可能产生一个事件,因此这也是避免在文件部分写入时运行命令的好方法。
另一种用途是设置较高的值(如 "30min" 或更长),以便为高强度任务(如临时备份脚本)节省电量或带宽。在这些使用场景中,请注意每个累积的事件都会占用内存。
接受以毫秒为单位的不带单位的值,或类似 "5sec 20ms" 的时间跨度值。不带单位的值已弃用,并会发出警告;未来将改为错误。
默认值为 50 毫秒。强烈不建议设置为 0。
默认值:
50ms--stdin-quit— 标准输入关闭时退出此选项会监视标准输入文件描述符的 EOF,并在其关闭时让 Watchexec 正常退出。一些进程管理器会使用此选项来避免遗留僵尸进程。
-p --postpone— 等待首次更改后再运行命令默认情况下,Watchexec 会立即运行命令一次。使用此选项后,它会改为等待检测到事件,然后像往常一样运行命令。
--delay-run <DURATION>— 运行命令前休眠检测到事件后,此选项会使 Watchexec 在运行命令前休眠指定的时间。这类似于在 shell 中使用 "sleep 5 && command",但具有可移植性且效率略高。
接受以秒为单位的不带单位的值,或类似 "2min 5s" 的时间跨度值。不带单位的值已弃用,并会发出警告;未来将改为错误。
--poll [INTERVAL]— 轮询文件系统更改默认情况下,在可用时,Watchexec 会使用操作系统原生的文件系统监视功能。此选项会禁用该功能,改用轮询机制。轮询效率较低,但可以规避某些文件系统(如网络共享)的问题或处理边缘情况。
可选接受以毫秒为单位的不带单位的值,或类似 "2s 500ms" 的时间跨度值,作为轮询间隔。如果未指定,默认值为 30 秒。不带单位的值已弃用,并会发出警告;未来将改为错误。
别名为 '--force-poll'。
--project-origin <DIRECTORY>— 设置项目起点Watchexec 会通过搜索各种标记(如文件或目录模式)来尝试发现项目的“起点”(或“根目录”)。它会尽力完成此操作,但有时可能判断错误,你可以使用此选项覆盖结果。
项目起点用于确定某些忽略文件的路径、正在使用的 VCS、过滤模式中开头的 '/' 的含义,以及未来可能增加的其他内容。
设置后,Watchexec 也不会再执行搜索,从而可以显著加快速度。
--workdir <DIRECTORY>— 设置工作目录默认情况下,命令的工作目录就是 Watchexec 的工作目录。你可以使用此选项更改它。请注意,路径的使用可能会变得不那么直观。
-h --help— 打印帮助
过滤
-w --watch <PATH>— 监视指定的文件或目录默认情况下,Watchexec 会监视当前目录。
监视单个文件时,通常最好改为监视其所在目录,然后根据文件名进行过滤。一些编辑器保存时可能会用新文件替换原文件,而某些平台可能无法检测到这一点或检测到后续更改。
启动时,Watchexec 会根据被监视的路径解析“项目起点”。更多信息请参阅 '--project-origin' 的帮助。
此选项可以多次指定,以监视多个文件或目录。
特殊值 '/dev/null' 如果作为唯一被监视的路径提供,会使 Watchexec 不监视任何路径。其他事件源(如信号或按键事件)仍可能使用。
-W --watch-non-recursive <PATH>— 以非递归方式监视指定目录与 '-w' 不同,使用此选项监视的文件夹不会递归进入其子目录。
此选项可以多次指定,以非递归方式监视多个目录。
-F --watch-file <PATH>— 从文件中读取要监视的文件和目录文件中的每一行都会被解释为像使用 '-w' 传入的内容。
对于更复杂的用途(如非递归监视),请使用参数文件功能:创建一个包含命令行选项的文件,然后通过
@path/to/argfile将其传递给 watchexec。特殊值 '-' 会从 STDIN 读取;这与 '--stdin-quit' 不兼容。
--no-vcs-ignore— 不加载 gitignore以及其他 VCS 排除文件,例如 Mercurial、Subversion、Bazaar、DARCS、Fossil 的排除文件。请注意,Watchexec 会检测正在使用的 VCS(如果有),并且只加载相关文件。全局文件(如 '~/.gitignore')和本地文件(如 '.gitignore')都会被考虑。
如果你想监视被 Git 忽略的文件,此选项很有用。
--no-project-ignore— 不加载项目本地忽略文件此选项会禁用加载被监视项目中的项目本地忽略文件,例如 '.gitignore' 或 '.ignore'。这与 '--no-vcs-ignore' 不同,后者会禁用加载 Git 和其他 VCS 忽略文件;它也与 '--no-global-ignore' 不同,后者会禁用加载全局或用户忽略文件,例如 '~/.gitignore' 或 '~/.config/watchexec/ignore'。
支持的项目忽略文件:
- Git:项目根目录及子目录中的 .gitignore、.git/info/exclude,以及 .git/config 中
core.excludesFile指向的文件。 - Mercurial:项目根目录及子目录中的 .hgignore。
- Bazaar:项目根目录中的 .bzrignore。
- Darcs:_darcs/prefs/boring
- Fossil:.fossil-settings/ignore-glob
- Ripgrep/Watchexec/通用:项目根目录及子目录中的 .ignore。
只有在发现相应 VCS 正用于该项目/起点时,才会使用 VCS 忽略文件(Git、Mercurial、Bazaar、Darcs、Fossil)。例如,Git 仓库中的 .bzrignore 会被丢弃。
- Git:项目根目录及子目录中的 .gitignore、.git/info/exclude,以及 .git/config 中
--no-global-ignore— 不加载全局忽略文件此选项会禁用加载全局或用户忽略文件,例如 '~/.gitignore'、'~/.config/watchexec/ignore' 或 '%APPDATA%\Bazaar\2.0\ignore'。请与 '--no-vcs-ignore' 和 '--no-project-ignore' 区分开。
支持的全局忽略文件
- Git(如果设置了 core.excludesFile):该路径指向的文件
- Git(否则):以下路径中第一个找到的文件:$XDG_CONFIG_HOME/git/ignore、%APPDATA%/.gitignore、%USERPROFILE%/.gitignore、$HOME/.config/git/ignore、$HOME/.gitignore。
- Bazaar:以下路径中第一个找到的文件:%APPDATA%/Bazaar/2.0/ignore、$HOME/.bazaar/ignore。
- Watchexec:以下路径中第一个找到的文件:$XDG_CONFIG_HOME/watchexec/ignore、%APPDATA%/watchexec/ignore、%USERPROFILE%/.watchexec/ignore、$HOME/.watchexec/ignore。
与项目文件一样,只有在项目中使用了相应 VCS 时,才会使用 Git 和 Bazaar 全局文件。
--no-default-ignore— 不使用内部默认忽略规则Watchexec 有一组默认忽略模式,例如编辑器交换文件、
*.pyc、*.pyo、.DS_Store、.bzr、_darcs、.fossil-settings、.git、.hg、.pijul、.svn以及 Watchexec 日志文件。--no-discover-ignore— 完全不发现忽略文件这是 '--no-global-ignore'、'--no-vcs-ignore'、'--no-project-ignore' 的简写,但效率更高,因为它会从一开始就跳过所有忽略发现机制。
请注意,默认忽略规则仍会加载,参见 '--no-default-ignore'。
--ignore-nothing— 完全不忽略任何内容这是 '--no-discover-ignore'、'--no-default-ignore' 的简写。
请注意,通过其他命令行选项(如 '--ignore' 或 '--ignore-file')显式加载的忽略规则仍会使用。
-e --exts <EXTENSIONS>— 要过滤的文件扩展名这是一个快速过滤器,仅为具有指定扩展名的文件发出事件。扩展名可以带前导点,也可以不带(例如 'js' 或 '.js')。可以重复此选项或使用逗号分隔来指定多个扩展名。
-f --filter <PATTERN>— 要过滤的文件名模式提供类似 glob 的过滤模式,仅发出与该模式匹配的文件事件。可以重复此选项来指定多个模式。不是来自文件的事件(例如信号、键盘事件)会原样通过。
--filter-file <PATH>— 要从中加载过滤器的文件提供一个包含过滤器的文件路径,每行一个。空行以及以 '#' 开头的行会被忽略。使用与 '--filter' 选项相同的模式格式。
也可以通过 $WATCHEXEC_FILTER_FILES 环境变量使用此功能。
环境变量:
WATCHEXEC_FILTER_FILES-J --filter-prog <EXPRESSION>— [实验性] 过滤程序。/!\ 此选项为实验性功能,可能会在不另行通知的情况下发生变化或消失。
使用 jaq(类似于 jq)语法提供自定义过滤程序。程序会接收一个事件,格式与 '--emit-events-to' 中所述的格式相同,并且必须返回布尔值。无效程序会导致 watchexec 启动失败;使用 '-v' 查看程序运行时错误。
除 jaq 标准库外,watchexec 还添加了一些自定义过滤器定义:
'path | file_meta' 返回文件元数据;如果文件不存在,则返回 null。
'path | file_size' 返回路径中文件的大小;如果文件不存在,则返回 null。
'path | file_read(bytes)' 返回路径中文件的前 n 个字节。
如果文件小于 n 个字节,则返回整个文件。没有一次读取整个文件的过滤器,这是为了鼓励限制读取和处理的数据量。- 'string | hash' 和 'path | file_hash' 返回字符串或路径中文件的哈希值。
不保证所使用的算法:请将其视为不透明值。- 'any | kv_store(key)'、'kv_fetch(key)' 和 'kv_clear' 提供简单的键值存储。
数据仅保存在内存中,不会持久化。不保证一致性。- 'any | printout'、'any | printerr' 和 'any | log(level)' 会打印或记录给定的任意
值到 stdout、stderr 或日志(级别 = error、warn、info、debug、trace),并 传递该值(因此 '[1] | log("debug") | .[]' 会产生 '1',并记录 '[1]')。使用此类程序完成的所有过滤,尤其是使用 kv 或文件系统访问的过滤,都比其他过滤方法慢得多。如果过滤速度太慢,事件会堆积并使 watchexec 停滞。设计过滤器时请务必谨慎。
如果此选项的参数以 '@' 开头,则参数的其余部分会被视为包含 jaq 程序的文件路径。
Jaq 程序会在所有其他过滤器之后按顺序运行,并且采用短路逻辑:如果某个过滤器(jaq 或其他类型)拒绝某个事件,则执行会在此处停止,不再运行其他过滤器。此外,它们会在输出第一个值后停止,因此在迭代时应使用 'any' 或 'all',否则只会处理第一项,这可能会造成相当大的困惑!
你可以在 <https://github.com/watchexec/watchexec/discussions/592> 查找用户贡献的程序,或提交你自己的实用程序。
示例:
对路径使用正则表达式忽略过滤器:
'all(.tags[] | select(.kind == "path"); .absolute | test("[.]test[.]js$")) | not'
传递创建文件的任意事件:
'any(.tags[] | select(.kind == "fs"); .simple == "create")'
传递涉及可执行文件的事件:
'any(.tags[] | select(.kind == "path" && .filetype == "file"); .absolute | metadata | .executable)'
忽略以 shebang 开头的文件:
'any(.tags[] | select(.kind == "path" && .filetype == "file"); .absolute | read(2) == "#!") | not'
-i --ignore <PATTERN>— 要过滤掉的文件名模式提供类似 glob 的过滤模式,与该模式匹配的文件事件将被排除。可以重复此选项来指定多个模式。不是来自文件的事件(例如信号、键盘事件)会原样通过。
--ignore-file <PATH>— 要从中加载忽略规则的文件提供一个包含忽略规则的文件路径,每行一个。空行以及以 '#' 开头的行会被忽略。使用与 '--ignore' 选项相同的模式格式。
也可以通过 $WATCHEXEC_IGNORE_FILES 环境变量使用此功能。
环境变量:
WATCHEXEC_IGNORE_FILES--fs-events <EVENTS>— 要过滤的文件系统事件这是一个快速过滤器,仅发出指定类型的文件系统更改事件。可选类型包括 'access'、'create'、'remove'、'rename'、'modify'、'metadata'。可以重复此选项或使用逗号分隔来指定多个类型。默认情况下,包含除 'access' 之外的所有类型。
在可能的情况下,这可能会在内核级别应用过滤,从而提高效率,但阅读日志时可能更容易造成困惑。
选项:
access、create、remove、rename、modify、metadata默认值:
create,remove,rename,modify,metadata--no-meta— 不为元数据更改发出文件系统事件这是 '--fs-events create,remove,rename,modify' 的简写。与 '--fs-events' 选项同时使用没有意义,也不被允许。
输出
-c --clear [MODE]— 运行命令前清除屏幕如果无法完全清除屏幕,请尝试 '--clear=reset'。
选项:
clear、reset--only-emit-events— 仅向 stdout 发出事件,不运行命令。这是将 Watchexec 用作文件监视器的便利选项,不运行任何命令。它几乎等同于使用
cat作为命令,但不会为每个事件生成一个新进程。此选项要求设置
--emit-events-to,并将可用模式限制为stdio和json-stdio,同时修改它们的行为,使其写入 stdout,而不是写入命令的 stdin。-N --notify— 在命令开始和结束时发出提醒启用此选项后,在支持的平台上,Watchexec 会在命令开始和结束时发出桌面通知。在不支持的平台上,它可能静默不执行任何操作,或记录警告。
--color <MODE>— 何时使用终端颜色将环境变量
NO_COLOR设置为任意值等同于使用--color=never。选项:
auto、always、never默认值:
auto--timings— 打印命令运行所需的时间这可能并不完全准确,因为其中包含 Watchexec 本身的一些开销。若要获得更准确的结果,请使用
time工具、高精度计时器或基准测试工具。-q --quiet— 不打印启动和停止消息默认情况下,Watchexec 会在命令启动和停止时打印消息。此选项会禁用该行为,因此只会打印命令的输出、警告和错误。
--bell— 命令完成时响铃
命令
--shell <SHELL>— 使用其他 shell默认情况下,在类 Unix 系统上,Watchexec 会使用已定义的 '$SHELL',否则使用默认的 'sh';在 Windows 上,则根据 Watchexec 检测到的运行中 shell,使用 'pwsh'、'powershell' 或 'cmd'(CMD.EXE)之一。
使用此选项可以覆盖默认设置并使用其他 shell,例如功能更多的 shell,或包含你自定义别名和函数的 shell。
如果值中包含空格,则会将其解析为命令行,并将第一个单词用作 shell 程序,其余部分作为 shell 参数。
命令会使用 '-c' 标志运行(Windows 上的 'cmd' 除外,其使用 '/C')。
特殊值 'none' 可用于完全禁用 shell。在这种情况下,提供给 Watchexec 的命令会被解析,第一个单词作为可执行文件,其余部分作为参数,然后直接执行。请注意,此解析方式较为简单,在某些情况下可能无法按预期工作。
使用 'none' 的效率略高,并且可以启用对输入更严格的解释,但这也意味着你无法使用 glob、重定向、控制流、逻辑或管道等 shell 功能。
示例:
不使用 shell:
$ watchexec -n -- zsh -x -o shwordsplit scr
使用 powershell core:
$ watchexec --shell=pwsh -- Test-Connection localhost
使用 CMD.exe:
$ watchexec --shell=cmd -- dir
使用其他 unix shell:
$ watchexec --shell=bash -- 'echo $BASH_VERSION'
使用带选项的 unix shell:
$ watchexec --shell='zsh -x -o shwordsplit' -- scr
-n— '--shell=none' 的简写--emit-events-to <MODE>— 配置事件发出方式Watchexec 在运行命令时可以发出事件信息,子进程可以利用这些信息来定位特定的更改文件。
需要注意的是,不要把可能性误认为必然行为。 尤其是,表面上看,
RENAMED变量似乎同时包含被重命名文件的原路径和新路径。在之前的版本中,在某些平台上甚至似乎总是原路径先于新路径。然而,这些都不是真的。无法可靠且可移植地判断哪个变更路径是旧路径或新路径;可能出现“半重命名”(只有原路径或只有新路径)、“未知重命名”(变更确实是重命名,但无法知道是旧路径还是新路径),重命名事件可能跨越两个防抖边界,等等。此选项控制发出这些信息的位置。默认值为 'none',表示完全不发出事件信息。其他选项为 'environment'(已弃用)、'stdio'、'file'、'json-stdio' 和 'json-file'。
'stdio' 和 'file' 模式基于文本:'stdio' 将绝对路径写入命令的 stdin,每行一个,每个路径前缀为
create:、remove:、rename:、modify:或other:,然后关闭该句柄;'file' 将相同内容写入临时文件,并通过 $WATCHEXEC_EVENTS_FILE 环境变量提供其路径。还有两种 JSON 模式,它们基于 JSON 对象,可以表示 Watchexec 处理的完整事件集合。以下是 Linux 上创建文件夹的示例:
json{"tags": [ { "kind": "path", "absolute": "/home/user/your/new-folder", "filetype": "dir" }, { "kind": "fs", "simple": "create", "full": "Create(Folder)" }, { "kind": "source", "source": "filesystem", } ], "metadata": { "notify-backend": "inotify" }
}字段如下:
tags,结构化事件数据。tags[].kind,可以是:
* 'path',以及: + `absolute`,绝对路径。 + `filetype`,已知时的文件类型('dir'、'file'、'symlink'、'other')。 * 'fs': + `simple`,“简单”事件类型('access'、'create'、'modify'、'remove' 或 'other')。 + `full`,“完整”事件类型,其复杂程度过高,无法在此完整描述,但形式类似 'General(Precise(Specific))'。 * 'source',以及: + `source`,事件来源('filesystem'、'keyboard'、'mouse'、'os'、'time'、'internal')。 * 'keyboard',以及: + `keycode`。目前仅支持值 'eof'。 * 'process',表示由进程导致的事件: + `pid`,进程 ID。 * 'signal',表示发送给 Watchexec 的信号: + `signal`,规范化的信号名称('hangup'、'interrupt'、'quit'、'terminate'、'user1'、'user2')。 * 'completion',表示命令结束: + `disposition`,退出处置方式('success'、'error'、'signal'、'stop'、'exception'、'continued')。 + `code`,退出、信号、停止或异常代码。metadata,有关事件的其他信息。
'json-stdio' 模式会将 JSON 事件发送到命令的标准输入,每行一个,然后关闭 stdin。'json-file' 模式会创建一个临时文件,将事件写入其中,并通过 $WATCHEXEC_EVENTS_FILE 环境变量提供文件路径。
最后,'environment' 模式在 2.0 之前是默认模式。对于文件系统事件,它会设置包含受影响文件路径的环境变量:
$WATCHEXEC_COMMON_PATH 被设置为以下所有变量中最长的公共路径,因此应将其添加到每个路径前面,以获得完整/实际路径。然后:
- 创建文件/文件夹时设置 $WATCHEXEC_CREATED_PATH
- 删除文件/文件夹时设置 $WATCHEXEC_REMOVED_PATH
- 重命名文件/文件夹时设置 $WATCHEXEC_RENAMED_PATH
- 修改文件/文件夹时设置 $WATCHEXEC_WRITTEN_PATH
- 修改文件/文件夹元数据时设置 $WATCHEXEC_META_CHANGED_PATH
- 对于其他所有类型的带路径事件设置 $WATCHEXEC_OTHERWISE_CHANGED_PATH
多个路径使用系统路径分隔符分隔;Windows 上为 ';',unix 上为 ':'。 在每个变量中,路径会去重并按二进制顺序排序(即不考虑 Unicode 或区域设置)。
这是旧版模式,已弃用,并将在未来移除。环境变量空间非常有限,同时能够有效表示的信息也很有限。大量文件可能导致环境变量被截断,也可能使进程报错或完全崩溃。$WATCHEXEC_COMMON_PATH 也不直观,多年来收件箱中出现的多次困惑咨询就证明了这一点。
选项:
environment、stdio、file、json-stdio、json-file、none默认值:
none-E --env <KEY=VALUE>— 向命令添加环境变量这是一个用于为命令设置环境变量的便利选项,不会为 Watchexec 进程本身设置这些变量。
使用 key=value 语法。可以重复此选项来设置多个变量。
--wrap-process <MODE>— 配置进程的包装方式默认情况下,Watchexec 会在 macOS 上的会话中运行命令,在其他 Unix 平台上将命令置于进程组中,并在 Windows 上将命令置于 Job Object 中。
一些 Unix 程序更适合在会话中运行,而另一些程序无法在进程组中运行。
使用 'group' 表示使用进程组,使用 'session' 表示使用进程会话,使用 'none' 表示直接运行命令。在 Windows 上,'group' 或 'session' 都会使用 Job Object。
选项:
group、session、none
调试
--print-events— 打印触发操作的事件处理事件时(防抖后),此选项会以人类可读的形式打印触发操作的事件。这对于调试过滤器很有用。
需要更多诊断信息时,请改用 '-vvv'。
--manual— 显示手册页如果输出目标是终端且 'man' 程序可用,则显示 Watchexec 的手册页。否则,以 ROFF 格式将手册页打印到 stdout(适合写入 watchexec.1 文件)。
示例:
$ mise watch build
运行 "build" 任务。只要其任一源发生变化,就会重新运行这些任务。
使用任务定义中的 "sources" 来确定要监视哪些文件。
$ mise watch build --glob src/**/*.rs
运行 "build" 任务,但使用 glob 模式指定要监视的文件。
这会覆盖任务定义中的 "sources"。
$ mise watch build --clear
额外参数会传递给 watchexec。详情请参见 `watchexec --help`。
$ mise watch serve --watch src --exts rs --restart
启动一个 API 服务器,监视 "./src" 中 "*.rs" 文件的变化,并在它们变化时终止/重启服务器。