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

时间:2016-02-04 09:03:28

标签: linux bash xargs fswatch

您好我正在尝试编写一个shell命令:

  1. 观看文件夹
  2. 当文件更改了将该文件复制到某个地方时
  3. 然后运行make任务
  4. fswatch ./src | xargs -I {} cp {} ./otherfolder

    前两个方面正在使用上面的命令,但在此之后我无法弄清楚如何运行命令。

    我已经尝试了

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

    这不起作用,因为&&与xargs冲突我认为

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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