Hi I am trying to write a shell command that does:
fswatch ./src | xargs -I {} cp {} ./otherfolder
the first 2 things are working with the command above, but I cannot figure out how to run a command after this.
I've tried
fswatch ./src | xargs -I {} cp {} ./otherfolder && make
That doesn't work because the && are conflicting with xargs I think
fswatch ./src | xargs -I {} cp {} ./otherfolder | make
Here the make command is immediately called, not after the copying is done. (It's even called before fswatch triggers on a change)
Is it possible to run a command after the cp using xargs?
One way to solve the problem would be to spawn a shell:
fswatch ./src | xargs -I {} sh -c "cp '{}' ./otherfolder && make"
The contents of the double quotes are executed in a separate shell and will behave as you expect (first the copy, then the execution of make, assuming the copy was successful).
The single quotes around {}
are advised to guard against problems when the filename contains spaces or other characters such as *
which would otherwise be expanded by the shell.