Estoy usando Mac OS X. Estoy tratando de copiar algunos archivos con el comando cp para un script de compilación como este.
cp ./src/*/*.h ./aaa
Pero este comando genera un error si no hay un archivo .h en el directorio ./src. ¿Cómo hacer que el comando no active el error? (falla silenciosa) El error hace que falle el resultado de la compilación, pero solo quiero copiar cuando solo hay algún archivo de encabezado.

:significa en este contexto.cp(si se desea). El shell incorporadotruepodría utilizarse en su lugar y sería más legible.:: ¿Cuál es el propósito de `: '(colon) GNU Bash Builtin?cpno está dePATHalguna manera ...)Estás buscando algo en la línea de
(Desafortunadamente, la
-fopción no es el droide que estás buscando).Si quieres igualar un globo, eso no funcionará; utilizar
finden su lugar, por ejemplo:fuente
set -ey el archivo desaparece entre[lascpinvocaciones y, el script se bloqueará).Antigua pregunta, pero aún podría ser relevante para otros.
Si no necesita usar cp, puede intentarlo con rsync.
Para copiar todos los archivos de un origen a un directorio de destino, ejecute:
Rsync viene con la mayoría de los sistemas tipo Unix, como Linux, Mac OS X o FreeBSD.
fuente
--ignore-missing-args:rsync -av --ignore-missing-args ./src/*/*.h ./aaaEsto tiene la ventaja sobre--ignore-errorsque los únicos errores ignorados son aquellos relacionados con los archivos fuente que no existen. Con--ignore-errorscada error se ignora, lo que puede ser peligroso. Además, tenga en cuenta que este parámetro es bastante reciente, por lo que podría no estar presente en las versiones anteriores de rsync.Canalizar el resultado a verdadero asegura que el comando siempre tendrá éxito. He intentado esto en Linux pero no en ningún Mac OS:
fuente
|siempre se ejecuta mientras||solo se realiza en caso de error. Ytruegeneralmente es un sistema binario, mientras que el colon:está integrado y no consume un PID.Podría forzar el estado de error correcto. Con una función:
Dado lo siguiente:
La copia regular devolverá un error. Devolverá un estado de salida de 1.
Si usamos la función cpalways () anterior, se ocultarán los errores:
fuente