1

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

  1. 看文件夹
  2. 当文件更改时,将新文件复制到某处
  3. 然后运行一个 make 任务

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 运行命令?

4

1 回答 1

5

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

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

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

当文件名包含空格或其他字符时,建议使用单引号{}来防止出现问题,*否则这些字符会被 shell 扩展。

于 2016-02-04T09:06:16.497 回答