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

Running a command after a command that used xargs and fswatch

您好,我正在尝试编写一个 shell 命令来执行以下操作:

  1. 观看文件夹
  2. 当文件发生变化时,将新文件复制到某处
  3. 然后运行创建任务

fswatch ./src | xargs -I {} cp {} ./otherfolder

前两件事与上面的命令一起工作,但我不知道如何运行此后的命令。

我试过了

fswatch ./src | xargs -I {} cp {} ./otherfolder && make

这行不通,因为我认为 && 与 xargs 冲突

fswatch ./src | xargs -I {} cp {} ./otherfolder | make

这里是立即调用make命令,而不是在复制完成之后。 (它甚至在 fswatch 触发更改之前被调用)

是否可以在 cp 之后使用 xargs 运行 命令?

解决问题的一种方法是生成 shell:

fswatch  ./src | xargs -I {} sh -c "cp '{}' ./otherfolder && make"

双引号中的内容在单独的 shell 中执行,并且会按您预期的方式运行(首先复制,然后执行 make,假设复制成功)。

建议在 {} 周围使用单引号,以防止文件名包含空格或其他字符(例如 * 时出现问题,否则这些字符将被 shell 扩展。