运行 使用 xargs 和 fswatch 的命令之后的命令
Running a command after a command that used xargs and fswatch
您好,我正在尝试编写一个 shell 命令来执行以下操作:
- 观看文件夹
- 当文件发生变化时,将新文件复制到某处
- 然后运行创建任务
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 扩展。
您好,我正在尝试编写一个 shell 命令来执行以下操作:
- 观看文件夹
- 当文件发生变化时,将新文件复制到某处
- 然后运行创建任务
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 扩展。