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

Nik*_*ole 1 linux bash xargs fswatch

嗨,我正在尝试编写一个执行以下命令的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触发更改之前被调用)

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

Tom*_*ech 5

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

fswatch  ./src | xargs -I {} sh -c "cp '{}' ./otherfolder && make"
Run Code Online (Sandbox Code Playgroud)

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

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