Por favor, no seleccione esta respuesta con el pulgar, sino la de Stephen, que marqué como correcta. Esto no es más que una variación más fácil de leer para mí.
Si el contenido del archivo de plantilla solo debe agregarse al archivo final si ninguno de ellos ya está presente en el archivo final, puede usargrep
:
cat <<-"EOF1" > myPath/myTemplate
content...
EOF1
if ! grep -F -q -f myPath/myFile myPath/myTemplate; then
cat myPath/myTemplate >> myPath/myFile
fi
El comando grep
busca myPath/endFile.sh
cualquier cadena fija(-F
)contenida en myPath/myTemplate
, leyendo un patrón por línea (-f
), e indica si encuentra alguno solo por su código de salida , sin salida(-q
).
El resultado luego se niega !
, de modo que el bloque then
del bloque if-then
solo se ejecutará si grep
no coincide con nada en el archivo final.
Cuando finaliza un proceso, devuelve un código de salida, que es un número entero pequeño. Por convención, un código de salida de 0 indica éxito, no -cero indica falla o error:
grep
devuelve 0 cuando encuentra una coincidencia y 1 si no la encuentra.
if
usa el código de salida de su argumento para decidir qué hacer; si es 0, procesa el bloque then
, de lo contrario, el bloque else
(si lo hay ).
Una puntuación(!
)cambia eso; El bloque then
solo se ejecuta si grep no coincide con nada (o encuentra un error ).