嗨,我正在尝试编写一个 shell 命令:
- 监视文件夹
- 当文件已更改时,将该新文件复制到某个位置
- 然后运行生成任务
fswatch ./src | xargs -I {} cp {} ./otherfolder
前 2 件事正在使用上面的命令,但我无法弄清楚在此之后如何运行命令。
我试过了
fswatch ./src | xargs -I {} cp {} ./otherfolder && make
这是行不通的,因为我认为 &&与 xarg 冲突
fswatch ./src | xargs -I {} cp {} ./otherfolder | make
在这里,make命令是立即调用的,而不是在复制完成后调用的。(它甚至在 fswatch 触发更改之前调用)
是否可以使用 xargs 在 cp 之后运行命令?
解决这个问题的一种方法是生成一个 shell:
fswatch ./src | xargs -I {} sh -c "cp '{}' ./otherfolder && make"
双引号的内容在单独的 shell 中执行,并将按预期运行(首先是复制,然后是 make 的执行,假设复制成功)。
建议使用{}
两边的单引号,以防止文件名包含空格或其他字符(如 *
)时出现问题,否则这些字符会被 shell 扩展。