在使用 xargs 和 fswatch 的命令之后运行命令



嗨,我正在尝试编写一个 shell 命令:

  1. 监视文件夹
  2. 当文件已更改时,将该新文件复制到某个位置
  3. 然后运行生成任务

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 扩展。

最新更新