您好我正在尝试编写一个shell命令:
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之后运行命令?
答案 0 :(得分:4)
解决问题的一种方法是生成一个shell:
fswatch ./src | xargs -I {} sh -c "cp '{}' ./otherfolder && make"
双引号的内容在一个单独的shell中执行,并且将按照您的预期运行(首先是复制,然后执行make,假设复制成功)。
建议{}
周围的单引号防止文件名包含空格或其他字符(例如*
)时出现问题,否则这些字符将由shell扩展。