首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >watchman :不在触发器中管道匹配的文件

watchman :不在触发器中管道匹配的文件
EN

Stack Overflow用户
提问于 2015-09-16 17:17:26
回答 1查看 486关注 0票数 1

我正在编写一个Makefile,并在watchman上尝试了一下。以下是目前Makefile的内容:

代码语言:javascript
复制
compile:
    elm-make app/Main.elm

watch:
    watchman watch `pwd`/app
    watchman trigger -- `pwd` compile 'app/*.elm' -- make compile

这里的问题是,当一个被监视的文件被更改时,执行的命令是make compile Other.elm

make compile是正确的,但是make Other.elm不对应Makefile中的任何内容,所以我在watchman日志文件中有一个错误。

我怎么能不考虑触发的命令中匹配的文件呢?是否只能使用命令行界面选项,而不能使用watchman -j

EN

回答 1

Stack Overflow用户

发布于 2015-09-17 13:02:27

很抱歉文档不是很清楚。您需要做的是使用扩展触发器语法来注册触发器。您必须使用JSON选项才能传入命令的-j表示:

代码语言:javascript
复制
watchman -j <<-EOT
["trigger", "`pwd`", {
   "name": "compile",
   "expression": ["match", "elm/*.elm", "wholename"],
   "command": ["make", "compile"],
   "append_files": false
}]
EOT

https://facebook.github.io/watchman/docs/cmd/trigger.html#extended-syntax有更多关于扩展语法的信息。其中最重要的部分是append_files位。

您需要找到一种方法来表达Makefile中的多行命令;我的直觉是在每一行的末尾使用\行续行符,但是我没有仔细检查文档。

还要注意,如果您的shell是bash或zsh,则可以使用此替代语法将调用放在一行中。这是我手工输入的,很可能把引号(!)弄乱了:

代码语言:javascript
复制
watchman -j <<< "[\"trigger\", \"`pwd`\", {\"name\": \"compile\", \"expression\":[\"match\", \"elm/*.elm\", \"wholename\"], \"command\": [\"make\", \"compile\"], \"append_files\": false}]"

https://facebook.github.io/watchman/docs/cli-options.html#input-and-output有更多关于调用的背景知识。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32604406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档