web:
image: nginx
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
Je voudrais avoir un script bash pour remplacer le nginx
pour un argument avec le script bash.
./script Apache
Remplacera nginx
pour Apache
Vous pouvez utiliser ceci: sed -r 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: Apache/' file
Échantillon échantillon:
$ cat file
web:
image: nginx
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
$ sed -r 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: Apache/' file
web:
image: Apache
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
Pour conserver les modifications dans le fichier, vous pouvez utiliser une option sur place comme ceci:
$ sed -ri 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: Apache/' file
Si vous le souhaitez dans un script, vous pouvez simplement insérer la commande sed
dans un script et l'exécuter avec $1
en substitution.
$ vim script.sh
$ cat script.sh
sed -ri 's/^(\s*)(image\s*:\s*nginx\s*$)/\1image: '"$1"'/' file
$ chmod 755 script.sh
$ cat file
web:
image: nginx
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
$ ./script.sh Apache
$ cat file
web:
image: Apache
volumes:
- "./app:/src/app"
ports:
- "3030:3000"
- "35729:35729"
$
script:
#!/bin/bash
sed -i.bak "s/\bnginx\b/$1/g" file
# \b matches for Word boundary
# -i changes the file in-place
# -i.bak produces a backup with .bak extension
Maintenant, vous pouvez faire ./script Apache
pour remplacer nginx avec Apache .
puisque c’est apparemment un fichier docker-composé, vous voudrez peut-être essayer
image: ${webserver_image}
puis définissez:
webserver_image=[nginx | Apache]
avant de lancer. Je crois que cela devrait vous donner une interpolation de Nice.
Vous pouvez créer votre script.sh comme suit:
#!/bin/bash
# $1 image value you want to replace
# $2 is the file you want to edit
sed -i "" "/^\([[:space:]]*image: \).*/s//\1$1/" $2
Et puis lancez: ./script.sh Apache filename.yaml