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

标签 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 命令,而不是在复制完成之后。 (它甚至在 fswatch 触发更改之前被调用)

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

最佳答案

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

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

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

{} 两边的单引号用于防止文件名包含空格或其他字符(例如 *)时出现问题,否则这些字符会被 shell 扩展。

关于linux - 在使用 xargs 和 fswatch 的命令之后运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35196643/

相关文章:

检查用户输入的字符串在 C 中的格式是否为 "%d/%d/%d/%d/%d"

linux - node.js 找不到模块 xml2js

linux - 如何在数组中存储包含双引号的命令参数?

find - ls : terminated by signal 13 when using xargs

awk - GNU 并行与 xargs 和 awk 一起使用

linux - 如何让 Jenkins 脚本中的 $PATH 与运行 Jenkins 的用户下的 $PATH 相匹配?

c - 在 C 程序中枚举增补组

Bash:从 youtube url 下载修剪后的 mp3 的 bash 脚本

linux - 创建重复文件并重命名

GIT 使用 gitcherry 和 format 显示 master 中缺少的分支的所有提交