Este problema solo ocurre en el contenedor acoplable.
Solo find
está bien:
find ${BASIN_SPIDER_CONFIG_PATH} -type f -name "*.json"
find
con sed
find ${BASIN_SPIDER_CONFIG_PATH} -type f -name "*.json"|xargs sed -i "s/10.142.55.199/host02/g"
da un error:
/xxx/config/sed8Ey5tD: Device or resource busy
No entiendo lo que es sed8Ey5tD
, ls
no puedo verlo. Creo que es por docker, pero no puedo entenderlo.
¿Cómo hacer el sed
éxito?
OK, he encontrado que el archivo está siendo volumed por estibador, existe volumes: /xxx/config.json : /xxx/config/config.json
en docker-compose.yml
. Después docker-compose down
, el archivo se puede editar. Pero, ¿cómo edito el archivo sin docker-compose down
?
sed
. Cuando realice una modificación en el lugar,sed
creará un archivo temporal para trabajar para evitar corromper su original. Si algo salió bien, entonces reemplaza el original por uno temporal. Pero cual es tu pregunta? ¿Quieres saber qué causa ese error o qué es elsed8Ey5tD
archivo?sed
para que no haya un archivo de respaldoxargs sed -i'' "s/10.142.55.199/host02/g"
(agregue comillas simples justo después de la-i
clave)Respuestas:
Sí, como descubrió, el archivo está montado por docker, lo que significa que no puede cambiar su inodo desde el contenedor de docker. Pero, ¿qué sucede si solo cambia el contenido del archivo sin tocar su inodo, funciona? Claro que si. Por lo tanto, todo lo que necesita hacer es encontrar una manera de cambiar el contenido del archivo original únicamente, en lugar de crear un nuevo archivo y luego reemplazar el original.
El comando
sed
con opción-i
crea un archivo nuevo y luego reemplaza el archivo antiguo por el nuevo, lo que definitivamente cambiará el inodo del archivo. Por eso te da el error.Entonces, ¿qué formas pueden cambiar el contenido del archivo? De muchas maneras
echo abc > file
cp
, por ejemplo,cp new old
Le damos varios ejemplos de cómo solucionar su problema:
El
cp
camino:El
vim
caminoEl
ed
caminofuente
En mi opinión, la forma más fácil de hacerlo es usar lo siguiente en un Dockerfile:
fuente