Hola, estoy tratando de escribir un comando de shell que haga:
fswatch ./src | xargs -I {} cp {} ./otherfolder
las primeras 2 cosas funcionan con el comando anterior, pero no puedo entender cómo ejecutar un comando después de esto.
He intentado
fswatch ./src | xargs -I {} cp {} ./otherfolder && make
Eso no funciona porque && están en conflicto con xargs, creo
fswatch ./src | xargs -I {} cp {} ./otherfolder | make
Aquí, el comando make se llama inmediatamente, no después de que se realiza la copia. (Incluso se llama antes de que fswatch se active en un cambio)
¿Es posible ejecutar un comando después del cp usando xargs?
Una forma de resolver el problema sería generar un caparazón:
fswatch ./src | xargs -I {} sh -c "cp '{}' ./otherfolder && make"El contenido de las comillas dobles se ejecuta en un shell separado y se comportará como espera (primero la copia, luego la ejecución de make, asumiendo que la copia fue exitosa).
Se recomienda usar comillas simples alrededor de {} para evitar problemas cuando el nombre del archivo contiene espacios u otros caracteres como * que, de lo contrario, se expandirían por el shell.